【发布时间】:2016-12-02 16:29:45
【问题描述】:
所以我使用 CFF Explorer 将代码部分添加到 .exe 文件中。我已将部分特征设置为0x60000020(可执行、可读、包含代码)并使用 IDA 在其中创建了一些虚拟代码。
但是,当我从原始 .text 段向该代码注入 jmp 时,我得到的只是访问冲突。我使用 IDA 修补二进制文件,因此它为我生成了偏移量,但它似乎是正确的:
jmp far ptr 6:75D100h
生成的操作码看起来也不错:
EA 00 D1 75 00 06 00
但是当我跳到那个位置时——“指令在 0xFFFFFFFF 处引用了内存,无法读取内存”。我对偏移量进行了一些试验,但无济于事;附加段似乎已正确加载到内存中。
如果有任何提示我在这里缺少什么,我将不胜感激:)
【问题讨论】:
-
是什么让您认为
6是正确的段选择器? -
@Jester 事实上,它不是 - 看起来正确的是 5 - 但段错误仍然存在。我不知道为什么 IDA 把 6 放在那里,谢谢
-
5看起来也很可疑。如果你在 LDT 中分配了一个新的描述符,7可以工作。 -
更好的问题是,为什么需要一个新的选择器?为什么需要跳远?
-
输入
jmp near ptr 75d100h应该让 IDA 使用正确的近距离跳转。
标签: windows assembly x86 exe ida