40087e: 48 8b 05 cb 01 20 00 mov 0x2001cb(%rip),%rax # 600a50 <__CTOR_LIST__+0x8>
上記はobjdumpの出力です。アセンブリの詳細情報はどのように入手できますか?
私はmov
、0x2001cb(%rip)
を表し48 8b 05 cb 01 20 00
のどの部分を知りたい...しかし
され、マシンコードを打破するためのツールですが?
40087e: 48 8b 05 cb 01 20 00 mov 0x2001cb(%rip),%rax # 600a50 <__CTOR_LIST__+0x8>
上記はobjdumpの出力です。アセンブリの詳細情報はどのように入手できますか?
私はmov
、0x2001cb(%rip)
を表し48 8b 05 cb 01 20 00
のどの部分を知りたい...しかし
され、マシンコードを打破するためのツールですが?
48 8B 05、CB 01 20 00 MOVの0x2001cb(%のRIP)は、%RAX
48は、典型的には、その命令のオペランド(レジスタまたはメモリ位置)を示すために使用さREX prefix
で64なければなりません代わりに32ビット(この命令ではEAXの代わりにRAX)を使用します。 REX接頭辞は、R8〜R15レジスタを操作する命令でも使用されます。
8b
は、MOV命令opcode
です。その他の値には他の値が使用されます。例えば、2bはSUBを意味し、8dはLEAを意味する。
05
は、64ビット・モードで(だけでなくdisp32
32ビットモードでの)アドレッシングRIP+disp32
メモリ、ModR/M
バイトです。これは、バイトのMod
とR/M
のビットフィールドにエンコードされています。このバイトのReg
ビットフィールドは、他のオペランドにRAXレジスタを使用するようにさらに指示します。
cb, 01, 20 and 00
メモリオペランドのdisp32
部分を形成します。この変位は2001CBH
に等しくなります。
すべて一緒に置くとMOV RAX, [RIP+2001CBH]
に到着します。
命令をデコードするには、いくつかの方法があります。
ndisasm
は、あなたの好きなデバッガでNASM
この質問に答えることはできません。 new_perlは、問題に時間を費やすようになった後で質問を削除します。ありがとう、芽! – dontGoPlastic