2012-02-18 14 views
0

一部のソフトウェアをネイティブクライアントに移植しようとしています。速度上の理由から、コード内の複数の場所でインラインasmを使用しています。 (それらのほとんどはとてもシンプルな1行のもので、安全だと考えられるほどシンプルです)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 *** 

しかし、私はこの出力が何を意味するのか本当に分かりません。少なくとも1つの違法な命令が見つかったことがわかります。 client_x86_32.nexeのobjdumpを実行したところ、不正な命令(s?)のアドレスがncvalの出力に基づいているかどうかを調べようとしましたが、できませんでした。 ncval出力。

助けを歓迎します。

(その間に私はコードからのasmブロックを取り除く開始し、私は安全のためにそれを修正することができるように、私は、問題のあるブロックを見つけることを願っています。)

答えて

1

バリデータの出力は、コードアドレスを与え、0x31be8 。 client_x86_32.nexeでgdbまたはobjdumpを使用して、0x31be8番地にある命令を確認し、asmブロックと比較してみてください。

+0

ありがとう、私はそれを逃した可能性があるか分からない。また、これらの手順を自動化するncval-annoteも見つかりました。 –

関連する問題