gpt4 book ai didi

assembly - JMP 到绝对地址(操作码)

转载 作者:行者123 更新时间:2023-12-04 13:02:34 26 4
gpt4 key购买 nike

我正在尝试编写一个 exe 打包程序/保护程序,作为了解有关汇编程序、C++ 以及 PE 文件工作原理的更多信息的一种方式。我目前已经让它工作了,所以包含 EP 的部分与一个 key 进行异或,并创建一个包含我的解密代码的新部分。一切都很好,除非我在解密后尝试 JMP 到原始 EP。

基本上我这样做:

DWORD originalEntryPoint = optionalHeader->AddressOfEntryPoint;
// -- snip -- //
crypted.put(0xE9);
crypted.write((char*)&orginalEntryPoint, sizeof(DWORD));

但 ollydbg 没有跳转到入口点,而是显示此代码反汇编为:
00404030   .-E9 00100000    JMP 00405035 ; should be 00401000 =[

当我尝试在 olly 中手动更改它时,新操作码显示为
00404030    -E9 CBCFFFFF    JMP crypted.00401000

0xCBCFFFFF 是从哪里来的?我将如何从 C++ 端生成它?

最佳答案

我认为E9是相对跳转的操作码:它的操作数指定要跳转的相对距离,从下一条指令的开始处加上或减去。

如果您希望操作数指定绝对地址,则需要不同的操作码。

关于assembly - JMP 到绝对地址(操作码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1546141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com