C怎么获取函数地址
C如何获取函数地址?
这是测试的c代码..
可是debug的时候,发现获取的地址不正确..
情况很奇葩,如图:
内存中的地址没有问题,可是赋值的时候值突然变了..
仔细看了一下,获取的内容好像是IAT表对应main函数的地址.
不知道有没有什么方法能够直接得到main函数在内存中的地址..
------解决方案--------------------
要么用函数指针,或者汇编吧!
------解决方案--------------------
------解决方案--------------------
仅供参考
#include <stdio.h>
typedef unsigned long DWORD;
int main()
{
DWORD lpMain = 0;
lpMain = (DWORD)main;
return 0;
}
这是测试的c代码..
可是debug的时候,发现获取的地址不正确..
情况很奇葩,如图:
内存中的地址没有问题,可是赋值的时候值突然变了..
仔细看了一下,获取的内容好像是IAT表对应main函数的地址.
不知道有没有什么方法能够直接得到main函数在内存中的地址..
c
函数地址
函数指针
------解决方案--------------------
要么用函数指针,或者汇编吧!
------解决方案--------------------
#include <stdio.h>
typedef int (*entry_t)(int argc, char *argv[]);
int main(int argc, char *argv[])
{
entry_t addr = main;
printf("%p\n", main);
printf("%p\n", addr);
return 0;
}
/** 输出信息 */
// 0x80483c4
// 0x80483c4
------解决方案--------------------
仅供参考
//仅对VC6
#include <stdio.h>
void fun1() {
int f1=1;
printf("fun1\n");
printf("fun1\n");
}
void fun2() {
int f2=2;
printf("fun2\n");
}
void fun3() {
}
void main() {
#ifdef _DEBUG
printf("sizeof(fun1)==%d\n",*(int *)((int)fun2+1)-*(int *)((int)fun1+1));
printf("sizeof(fun2)==%d\n",*(int *)((int)fun3+1)-*(int *)((int)fun2+1));
//sizeof(fun1)==59
//sizeof(fun2)==43
#else
printf("sizeof(fun1)==%d\n",(int)fun2-(int)fun1);
printf("sizeof(fun2)==%d\n",(int)fun3-(int)fun2);
//sizeof(fun1)==32
//sizeof(fun2)==16
#endif
}