gpt4 book ai didi

c++ - C++/内联汇编中的运行时修补

转载 作者:太空狗 更新时间:2023-10-29 21:47:09 26 4
gpt4 key购买 nike

我正在尝试修补函数 cat() 以返回 true,但出于某种原因,当我什至没有调用该函数时程序崩溃了。问题是我的修补方法吗?我想我写的是正确的地址(函数地址是 004012e4)。我在 Windows XP 32 位系统上使用代码块 (gcc)。

#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

int cat()
{
cout<<"false"<<endl;
return false;
}

int main()
{
DWORD beef;
int (*css)();
css=cat;
cout<<css<<endl;
system("PAUSE");
VirtualProtect(&css,49,PAGE_EXECUTE_READWRITE,&beef);
asm("mov $0x40130f,%eax");//move address of the mov $0x0,eax instruction to eax
asm("movl $0x1,(%eax)");//write at address changing B800 to B801 or return true

return 0;
}

最佳答案

为什么要硬编码函数地址?你在代码中有它,你正在打印它。如果您打印它然后更改代码以包含您打印的内容,则可能会移动该功能。为什么不直接动态生成汇编语句?

关于c++ - C++/内联汇编中的运行时修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746384/

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