2009-10-27 13 views
5

De acuerdo con la Linux man page for mprotect la función tiene 3 argumentos:función mprotect llamada con 5 argumentos

int mprotect(const void *addr, size_t len, int prot); 

pero mientras se ejecuta ltrace en un programa que estoy analizando veo que mprotect se llama así:

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)  = 0 

¿Cuáles son los argumentos 4 y 5 para ??

Editar: Usando ltrace versión 0.5. y kernel 2.6.24-24-generic

gracias

+0

¿Qué hay de la quinta ¿uno? – Cascabel

+0

lo siento, mientras escaneo los argumentos me perdí el 4to;) – woolagaroo

+0

¿Qué versión de strace. ¿Qué versión del kernel de Linux? – Puppe

Respuesta

7

Cinco es el número de argumentos que ltrace imprimirá si no puede encontrar la descripción de la función en el archivo de configuración. (/etc/ltrace.conf por defecto, creo).

En mi sistema puedo ver el mismo comportamiento, y el mprotect no se encuentra allí, solo el SYS_mprotect.

Si desea tener una segunda vista de la fuente ltrace, el lugar de interés es output.c, el condicional después de "func = name2func (function_name);" - que imprime 5 args en caso de que no se encuentre la metainformación para el nombre de la función (y en cuyo caso la búsqueda lineal dentro de la función name2func devuelve NULL).

Por lo tanto, el manual es correcta, es ltrace que es "malo" (citado "mal" porque técnicamente el código funciona como debería, aunque probablemente los defs en la configuración deben ser fijos)

+0

En estos días parece ser 'ret-> num_params = 4;' en 'build_default_prototype'. Gracias por este comentario, sin embargo, me ayudó a descubrir cómo ltrace determina # args desde una función desconocida. Esperaba que fuera algún algoritmo mágico. – wump

Cuestiones relacionadas