使用OllyDBG计算装配中的偏移量

时间:2013-06-04 13:24:04

标签: assembly ollydbg

相关集会:

$        > 94D3A705         PUSH hw.05A7D394                         ; ASCII "glBegin"
$+5      > E8 99C80500      CALL <JMP.&SDL2.SDL_GL_GetProcAddress>
$+A      > 83C4 04          ADD ESP,4
$+D      > A3 04E03B06      MOV DWORD PTR DS:[63BE004],EAX
$+12     > 8B0D 04E03B06    MOV ECX,DWORD PTR DS:[63BE004]           ; OPENGL32.glBegin
$+18     > 890D 38E83B06    MOV DWORD PTR DS:[63BE838],ECX

第一行将字符串地址作为函数参数推送到堆栈。最后一行将ECX中的值复制到此DWORD数据对象。这个地址是我的目标。我想替换包含的DWORD值。

在我的C ++代码中,我首先获取第一行的push函数的地址,然后添加一个偏移量。通过添加偏移量0x1A,代码可以正常工作,但是当我尝试添加+ 0x18时,它不起作用。

我不想为每个功能测试这个,我缺少的基本想法是什么?

1 个答案:

答案 0 :(得分:0)

$+18     > 890D 38E83B06    MOV DWORD PTR DS:[63BE838],ECX

指令MOV DWORD PTR DS:[63BE838],ECX从起点开始+ 18h开始,但指令中硬编码的地址本身在2个字节后开始:

890D 38E83B06
反向字节顺序的

38E83B06063be838。 Ollydbg为您提供了视觉上的好处。

当尝试在指令中获取常量的偏移量时,您必须查看字节码(ollydbg中的第二行)。你会发现你的常量嵌入在那里,必须从指令的开头取偏移。