2012-02-18 97 views
0

我想将一些软件移植到本地客户端。为了速度的原因,它在代码的多个位置使用一些内联asm。 (其中大部分都是非常简单的单行程序,非常简单,应该被认为是安全的。)如何解释ncval的输出?

我得到了编译和链接的项目,但目前它失败了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 *** 

但我真的不知道这个输出是什么意思。我可以看到它至少发现一条非法指令。我做了一个client_x86_32.nexe的objdump,我试图找出非法指令(s?)的地址是基于ncval的输出的,但是我不能,因为我不知道如何根据ncval输出。

任何帮助,欢迎。

(在此期间,我将开始从代码删除ASM块,并希望我找到有问题的块,这样我可以纠正它是安全的。)

回答

1

验证器的输出给了代码的地址,0x31be8 。尝试使用client_x86_32.nexe上的gdb或objdump来查看地址0x31be8处的指令,并将其与您的asm块进行比较。

+0

谢谢,我不知道我怎么可能错过了。我还发现了ncval-annote,它可以自动执行这些步骤。 – 2012-02-19 23:08:27