1

「逆アセンブラ」のようなものを書く必要があります。RAMメモリ(コードセクション)を読み取り、次のようにフォーマットして表示する必要があります。

ADD rax, rbx
MOV rcx, rax

オペコードを対応する操作/オペランドに変換する方法に関する包括的なガイド/ペーパーはどこにありますか?x64アセンブリをターゲットにしています

4

5 に答える 5

3

このライブラリを見ることができます。「そのまま」使用することも、ソース(BSDライセンスの下でリリースされている)から学ぶこともできます。

于 2012-12-30T16:35:04.450 に答える
2

さらに別の x86 逆アセンブラーを作成する代わりに、BSD ライセンスのudis86 ライブラリーを使用することを強くお勧めします。

#include <stdio.h>
#include <udis86.h>

enum {
    /* Controls whether to disassemble for x86 or x64 */
    UDIS86_MODE = 64 /* 16, 32, or 64 */
};

int main()
{
    ud_t ud_obj;

    ud_init(&ud_obj);

    ud_set_input_file(&ud_obj, stdin);
    ud_set_mode(&ud_obj, UDIS86_MODE);
    ud_set_syntax(&ud_obj, UD_SYN_INTEL);

    while (ud_disassemble(&ud_obj)) {
        printf("\t%s\n", ud_insn_asm(&ud_obj));
    }

    return 0;
}

github の Udis86 のバージョンは、最新の Intel AVX 命令もサポートしています。

Udis86 は、MinGW64 / MSYS ツールチェーンを使用して、x86 または x64 Windows 用に非常に簡単に構築できます。GCC と GNU autotools ビルド システムに慣れていない場合に備えて、以下をビルドしました。

  1. http://scottt.tw/mingw32-udis86.tar.gz
  2. http://scottt.tw/mingw64-udis86.tar.gz

あなたの便宜のために。アーカイブには、DLL ファイルとヘッダー ファイルが含まれています。(Stackoverflow で質問に答える無作為の見知らぬ人から DLL をダウンロードして実行することが賢明かどうかは別の問題です;)。

于 2013-01-03T02:55:32.703 に答える
0

これは、数値順にソートされたオペコードのリストです。

http://ref.x86asm.net/geek64.html

そのサイトには他にも多くのリストがあります。ただし、ご覧のとおり、x86/64 には非常に多くのオペコードがあるため、手動で逆アセンブラーを作成するには時間がかかります。

コードを既存の逆アセンブラーにフィードすることをお勧めします。たとえば、次の質問を参照してください。

生の x86 コードを逆アセンブルするにはどうすればよいですか?

于 2012-12-30T16:35:30.260 に答える
0
  1. Intel については、 http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.htmlで見つけることができます。特に、Volume 2 に興味があるかもしれません。

  2. AMD プロセッサの場合は、http: //developer.amd.com/resources/documentation-articles/developer-guides-manuals/#manualsにある必要があります。3巻が必要なようです。

それでも、彼らには多くの共通点があります。

于 2012-12-30T16:37:03.667 に答える
0

独自の逆アセンブラを作成する場合は、命令セット ガイド (第 2 巻) を ... からダウンロードすることが不可欠です。

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

付録のメモと表は非常に貴重です。多くの命令が同様のパターンに従っていることに気付くでしょう。その結果、関数ポインターの独自のテーブルを作成して、命令をデコードできます。テーブルの作成には時間がかかる場合があります。

お役に立てれば。

于 2012-12-30T19:34:35.107 に答える