「逆アセンブラ」のようなものを書く必要があります。RAMメモリ(コードセクション)を読み取り、次のようにフォーマットして表示する必要があります。
ADD rax, rbx
MOV rcx, rax
オペコードを対応する操作/オペランドに変換する方法に関する包括的なガイド/ペーパーはどこにありますか?x64アセンブリをターゲットにしています
「逆アセンブラ」のようなものを書く必要があります。RAMメモリ(コードセクション)を読み取り、次のようにフォーマットして表示する必要があります。
ADD rax, rbx
MOV rcx, rax
オペコードを対応する操作/オペランドに変換する方法に関する包括的なガイド/ペーパーはどこにありますか?x64アセンブリをターゲットにしています
このライブラリを見ることができます。「そのまま」使用することも、ソース(BSDライセンスの下でリリースされている)から学ぶこともできます。
さらに別の 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 ビルド システムに慣れていない場合に備えて、以下をビルドしました。
あなたの便宜のために。アーカイブには、DLL ファイルとヘッダー ファイルが含まれています。(Stackoverflow で質問に答える無作為の見知らぬ人から DLL をダウンロードして実行することが賢明かどうかは別の問題です;)。
これは、数値順にソートされたオペコードのリストです。
http://ref.x86asm.net/geek64.html
そのサイトには他にも多くのリストがあります。ただし、ご覧のとおり、x86/64 には非常に多くのオペコードがあるため、手動で逆アセンブラーを作成するには時間がかかります。
コードを既存の逆アセンブラーにフィードすることをお勧めします。たとえば、次の質問を参照してください。
Intel については、 http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.htmlで見つけることができます。特に、Volume 2 に興味があるかもしれません。
AMD プロセッサの場合は、http: //developer.amd.com/resources/documentation-articles/developer-guides-manuals/#manualsにある必要があります。3巻が必要なようです。
それでも、彼らには多くの共通点があります。
独自の逆アセンブラを作成する場合は、命令セット ガイド (第 2 巻) を ... からダウンロードすることが不可欠です。
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
付録のメモと表は非常に貴重です。多くの命令が同様のパターンに従っていることに気付くでしょう。その結果、関数ポインターの独自のテーブルを作成して、命令をデコードできます。テーブルの作成には時間がかかる場合があります。
お役に立てれば。