0

一部のソフトウェアをネイティブクライアントに移植しようとしています。速度上の理由から、コード内の複数の場所でいくつかのインライン asm を使用します。(それらのほとんどは本当に単純な 1 行のものであり、非常に単純であるため、安全であると見なす必要があります。)

プロジェクトをコンパイルしてリンクしましたが、現時点では 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 を実行し、不正な命令のアドレスが ncval の出力に基づいていることを突き止めようとしましたが、計算方法がわからないため、できませんでした。 ncval 出力。

どんな助けでも大歓迎です。

(それまでの間、コードから asm ブロックの削除を開始し、問題のあるブロックを見つけて、安全に修正できるようにします。)

4

1 に答える 1

1

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

于 2012-02-19T01:30:57.893 に答える