Wus*_*uhn 2 c++ windows x86 assembly dumpbin
我刚刚第一次使用DUMPBIN,我在输出文件中反复看到术语HIGHLOW:
BASE RELOCATIONS #7
11000 RVA, E0 SizeOfBlock
...
3B5 HIGHLOW 2001753D ___onexitbegin
3C1 HIGHLOW 2001753D ___onexitbegin
...
Run Code Online (Sandbox Code Playgroud)
我很好奇这个词的意思.我没有在Google或Stackoverflow上找到任何关于它的内容.
要应用修正,请将delta计算为首选基址与实际加载图像的基础之间的差异.
基本的想法是,在某个地址进行修正时,我们必须知道
以下是"类型"字段的一些可能值
HIGH - 在"偏移"处向16位值添加更高字(16位)的deltaLOW - 将"delta"的低位字添加到"offset"处的值HIGHLOW - 在"offset"处为32位值添加完整增量换句话说,HIGHLOW类型告诉程序它正在对此重定位块*的页面偏移"偏移"进行修复,并且需要修改双字以便具有正确工作的可执行文件.
*所有重定位条目都分组为块,每个块都有一个应用其条目的页面
假设你的代码中有这条指令:
section .data
message: "Hello World!", 0
section .code
...
mov eax, message
...
Run Code Online (Sandbox Code Playgroud)
你运行汇编程序,然后运行反汇编程序.现在您的代码如下所示:
mov eax, dword [0x702000]
Run Code Online (Sandbox Code Playgroud)
你现在好奇为什么会这样0x700000,当你调查文件转储时,你会看到它
ImageBase: 0x00700000
Run Code Online (Sandbox Code Playgroud)
现在,您了解此数字的来源,并准备好运行可执行文件.将可执行文件加载到内存并为它们创建地址空间的Loader发现,该内存0x700000不可用,需要将该文件放在其他位置.它决定0xf00000可以,并在那里复制文件内容.
但是,您的程序仅与数据相关联,0x700000并且链接器无法知道其输出将被重定位.因此,装载机必须发挥其魔力.它
0x700000它想要的0xf00000(首选地址).它从另一个中减去一个并得到0x800000结果..reloc文件的部分还有更多类型的重定位条目,其中一些是特定于体系结构的.要查看完整列表,请阅读"Microsoft可移植可执行文件和通用目标文件格式,第6.6.2节"修复类型".