2016-08-03 6 views
0

私は友人のためにデバッグしようとしているソフトウェアのいくつかの問題に遭遇しています..アセンブリでPTRの参照を解除するにはどうすればよいですか?

私はポインタから関数のアドレスを取得する方法を知る必要があります.. 。

だから私は持っている場合たとえば...

MOV ECX, DWORD PTR DS : [82738119] 

は、その後、私は、実際にアドレス位置を知らなくても、このような何かを、これを逆転できるようにする必要があります...

// I'm looking for a way to make EAX 82738119, using only the pointer in ECX.... 
MOV EAX, SOME_COMMAND[ECX]; 

答えて

2

メモリロケーションが命令のオペコードに「埋め込まれている」ため、命令自体を読み取らないと実行できません。

例:

CPU Disasm 
Address Hex dump    Command 
00DA2A6D A1 A861DA00   MOV EAX,DWORD PTR DS:[0DA61A8] 

命令のメモリ位置(0x0DA61A8)もオペコードに見ることができる方法を見る(リトルエンディアン:A8 61 DA 00)。

上記の例では、EAXからメモリ位置を取得する方法はありません。

可能な「トリック」は命令のメモリ位置を読み取ることである:最初の部分を述べる

CPU Disasm 
Address Hex dump   Command        Comments 
00DA35B8  A1 A861DA00 MOV EAX,DWORD PTR DS:[0DA61A8]  ; example instruction (we want to read 0x0DA61A8) 
00DA35BD  E8 00000000 CALL 00DA35C2      ; call next instruction 
00DA35C2  59    POP ECX        ; pop this instruction address in ecx 
00DA35C3  83E9 09  SUB ECX,9       ; ecx points on 0x0DA35B9 (memory location) 
00DA35C6  8B01   MOV EAX,DWORD PTR DS:[ECX]   ; eax = [00DA35B9] = 0x0DA61A8 
+0

もう一つの方法: 'MOV ECX、[82738119]'で、 'ecx'レジスタが出力されます-のみ。 –

関連する問題