2012-02-18 77 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