Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

288
Views
sistema nasm llama a Linux

Tengo una pregunta sobre las llamadas al sistema Linux x86 en ensamblador.

Cuando estoy creando un nuevo programa ensamblador con nasm en Linux, me gustaría saber qué llamadas al sistema debo usar para realizar una tarea específica (por ejemplo, leer un archivo, escribir resultados o simplemente salir...). Conozco algunos syscall porque los he leído en algunos ejemplos tomados en Internet (como eax=0, ebx=1 int 0x80 exit con valor de retorno de 1), pero nada más... ¿Cómo podría saber si hay otros? argumentos para salir de syscall? ¿O para otra llamada al sistema? Estoy buscando documentos que expliquen qué llamadas al sistema tienen qué argumentos pasar en qué registros.

He leído la página de manual sobre la función de salida, etc. pero no me explicó lo que estoy preguntando.

Espero haber sido lo suficientemente claro,

¡Gracias!

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El wiki x86 (que acabo de actualizar nuevamente :) tiene enlaces a la llamada del sistema ABI (cuáles son los números para cada llamada, dónde colocar los parámetros, qué instrucción ejecutar y qué registros se eliminarán al regresar). Esto no está documentado en la página del manual porque es específico de la arquitectura. Lo mismo para las constantes binarias: no tienen que ser las mismas en todas las arquitecturas.

grep -r O_APPEND /usr/include para que su arquitectura de destino busque recursivamente los archivos .h .

Aún mejor es configurar las cosas para que pueda usar las constantes simbólicas en su fuente asm, para facilitar la lectura y evitar el riesgo de errores.

El gcc en realidad usa el preprocesador C cuando procesa archivos .S , pero incluir la mayoría de los archivos de encabezado C también le dará algunos prototipos C.

O convierta los #define s a macros NASM con sed o algo así. Tal vez alimente algunas líneas #include<> al preprocesador C y haga que imprima solo las definiciones de macro.

 printf '#include <%s>\n' unistd.h sys/stat.h | gcc -dD -E - | sed -ne 's/^#define \([A-Za-z_0-9]*\) \(.\)/\1\tequ \2/p'

Eso convierte cada #define no vacío en un symbol equ value NASM. El archivo resultante tiene muchas líneas de error: expression syntax error cuando intenté ejecutar NASM en él, pero seleccionar manualmente algunas líneas válidas puede funcionar.

Algunas constantes se definen en varios pasos, por ejemplo, #define S_IRGRP (S_IRUSR >> 3) . Esto podría o no funcionar cuando se convierte a definiciones de símbolos equ de NASM.

También tenga en cuenta que en C 0666 , es una constante octal. En NASM, necesita 0o666 o 666o ; un 0 inicial no es especial. De lo contrario, la sintaxis de NASM para constantes hexadecimales y decimales es compatible con C.

over 4 years ago · Santiago Trujillo Report

0

Tal vez esté buscando algo como linux/syscalls.h[1], que tiene en su sistema si instaló el código fuente de Linux a través de apt-get o lo que sea que use su distribución.

[1] http://lxr.free-electrons.com/source/include/linux/syscalls.h#L326

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!