Как интерпретировать вывод ncval? - PullRequest
0 голосов
/ 18 февраля 2012

Я пытаюсь портировать некоторые программы на native-клиент. По соображениям скорости он использует несколько встроенных ассемблеров в разных местах кода. (Большинство из них действительно простые однострочные, настолько простые, что их следует считать безопасными.)

Я получил проект для компиляции и компоновки, но в данный момент он не справляется с анализом кода Chrome. Ncval выводит следующее:

segment[0] p_type 6 p_offset 0 vaddr 0 paddr 0 align 4
    filesz b4 memsz b4 flags 4
segment[1] p_type 1 p_offset 10000 vaddr 20000 paddr 20000 align 65536
    filesz 2e91a0 memsz 2e91a0 flags 5
parsing segment 1
VALIDATOR: 31be8: Illegal instruction
segment[2] p_type 1 p_offset 300000 vaddr 10020000 paddr 10020000 align 65536
    filesz 72aac memsz 72aac flags 4
segment[3] p_type 1 p_offset 380000 vaddr 100a0000 paddr 100a0000 align 65536
    filesz 1cb8 memsz 29658 flags 6
*** client_x86_32.nexe IS UNSAFE ***
Validated client_x86_32.nexe
***  client_x86_32.nexe is UNSAFE ***

Но я действительно не знаю, что означает этот вывод. Я вижу, что он нашел по крайней мере одну незаконную инструкцию. Я сделал objdump для client_x86_32.nexe и попытался выяснить, что адрес недопустимой инструкции (s?) Основан на выводе ncval, но я не смог, потому что я не знаю, как рассчитать его на основе вывод ncval.

Любая помощь приветствуется.

(Тем временем я начну удалять блоки кода asm из кода и надеюсь, что найду блокирующий блок, чтобы исправить его, чтобы он был безопасным.)

1 Ответ

1 голос
/ 19 февраля 2012

вывод валидатора дал кодовый адрес, 0x31be8.попробуйте использовать gdb или objdump на client_x86_32.nexe, чтобы увидеть, какая инструкция находится по адресу 0x31be8, и сравните ее с вашими блоками asm.

...