Является ли переменная elf_entry в функции ядра load_elf_binary точкой входа, которую я получаю с помощью readelf -h - PullRequest
1 голос
/ 07 января 2012

Мне нужно найти точку входа в файл elf, работающий в виртуальной среде (debian x86). На хост-машине я могу определить текущий указатель команд и все остальные регистры процессора. Таким образом, можно определить вызовы функций ядра.

Функция load_elf_binary вызывает функцию start_thread со следующими параметрами:

start_thread (regs, elf_entry, bprm-> p);

Так что я должен иметь возможность получать elf_entry из регистров процессора, но когда я сбрасываю регистры, я получаю такой вывод:

EAX=0xc61bffb4
EBX=0xc61bffb4
ECX=0xbff29430
EDX=0xb78ae850
ESI=0xc78f9500
EDI=0xbff29fec
EBP=0xbff29488
ESP=0xc61bfeb4
EIP=0xc1001f82
CR2=0xb78ca840

Ни один регистр не имеет значения, начинающегося с 0x8xxxxxxx, поэтому я не уверен, что сделал ошибку или elf_entry не является точкой входа, которую я ищу.

Основной вопрос: является ли переменная elf_entry в функции ядра load_elf_binary точкой входа, которую я получаю с помощью readelf -h?

Ответы [ 2 ]

2 голосов
/ 09 января 2012

elf_entry для этой функции соответствует точке входа ELF только для статических двоичных файлов, для динамических двоичных файлов она соответствует точке входа динамического компоновщика (который должен наконец вызвать точку входа двоичного файла), см. http://lxr.free -electrons.com / источник / фс / binfmt_elf.c? v = 2.6.32 # L888 .

0 голосов
/ 09 января 2012

После компиляции нового ядра с помощью printk я узнал, что new_ip всегда начинается с 0xb78xxxxxx, поэтому elf_entry и точка входа в файл elf не совпадают.

...