
正文
c语言函数修改内存空间 c语言修改函数内容
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言!!求哪位大神解释下这两个改内存的函数啊!!
好吧c语言函数修改内存空间,c语言函数修改内存空间我来接分c语言函数修改内存空间的。顺便教c语言函数修改内存空间你怎么恢复。
#include stdio.h
#include windows.h
unsigned char enter[5];
unsigned char jmp[5];
int Func()
{
return 4;
}
int MyFunc()
{
return 5;
}
bool hook()
{
DWORD dwOld=0;
if(!VirtualProtect(Func,5,PAGE_EXECUTE_READWRITE,dwOld))
{
return false;
}
memcpy(Func,jmp,5);//写入构造的地址
//刷新指令cache中相关地址指令的内容
HANDLE hProcess = GetCurrentProcess();
FlushInstructionCache(hProcess,(LPVOID)Func,5);
return true;
}
bool unhook()
{
DWORD dwOld=0;
if(!VirtualProtect(Func,5,PAGE_EXECUTE_READWRITE,dwOld))
{
return false;
}
memcpy(Func,enter,5);//写入原来的地址
HANDLE hProcess = GetCurrentProcess();
FlushInstructionCache(hProcess,(LPVOID)Func,5);
return true;
}
void main()
{
memcpy(enter,(LPVOID)Func,5);//保存原地址
jmp[0]=0xe9;//动态构造一个长跳转指令
*(int*)jmp[1]=(int)MyFunc-((int)Func+5);
hook();
int a = Func();
printf("%d\n",a);
unhook();
int b = Func();
printf("%d\n",b);
}
相关问答
Q1: C语言中,怎么用realloc函数缩小已经分配的内存空间呢?比如说:int *p=(int *)m
int* p=(int*)malloc(15*sizeof(int));
p=(int*)realloc(p, 10*sizeof(int)); //重新分配空间
Q2: C语言 malloc()函数 分配内存空间尺寸的问题
这个问题首先得从堆栈说起,一个程序一般分为三段c语言函数修改内存空间:代码段,数据段(静态数据),和堆栈段。堆栈段存储程序中c语言函数修改内存空间的变量、程序传递的参数等(动态分配的变量存储在堆中,静态分配的存储在栈中)。堆栈的增长方式如下c语言函数修改内存空间:
程序在运行的时候会预先分配堆栈空间,所以你的问题中不一定修改了不该修改的地方,有可能那里本来就是空的。
再回到malloc这个函数上来,malloc主要负责分配空间,返回该空间的首地址。那为什么申请空间为0,却可以存储7个字符呢c语言函数修改内存空间?那是因为C语言的指针中并不检查数组的越界问题,不信的话,你可以这样:char ch[5],然后你去读写ch[6](printf或scanf),这样是不会报错的。但是我们在使用的时候,千万别越界使用,因为这样的程序是非常危险的,试想,如果越界使用的地址正好是一个操作系统的地址,那么你一修改,系统就崩了。同时,C语言的这个机制被黑客广泛地应用与缓冲区溢出攻击,所以你非但不能越界使用指针,还得时刻考虑到指针(数组)是否越界,以加强程序的安全性。
希望对你有所帮助。。。
Q3: C语言中如何动态增加内存空间
动态增加内存空间 可以用 realloc 函数。函数原型是。
void* realloc (void* ptr, size_t size);
例如,你第一次用 malloc 函数 动态分配了空间,随着一步步运算,觉得空间不够,需要加大空间,与此同时,原先空间里的数据需保留并还要继续使用,这时需要用 realloc,它能满足此需要。
下面是完整的程序例子。告诉使用 realloc 的窍门。
#include stdio.h /* printf, scanf, puts */
#include stdlib.h /* realloc, free, exit, NULL */
int main ()
{
int input,n;
int count = 0;
int* numbers = NULL;
int* more_numbers = NULL;
do {
printf ("Enter an integer value (0 to end): ");
scanf ("%d", input);
count++;
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input;
}
else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1);
}
} while (input!=0);
printf ("Numbers entered: ");
for (n=0;ncount;n++) printf ("%d ",numbers[n]);
free (numbers);
return 0;
}
关于c语言函数修改内存空间和c语言修改函数内容的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







