c语言-C语言,如何在一个函数内部,获取这个函数入口点的地址?

问题描述

C语言,如何在一个函数内部,获取这个函数入口点的地址? 1C
# Git@OSC 的 Android 和 iOS 客户端全面开源

include #include void show(void* p) { printf(""%pn""p); } int main() { show(&show); show(show); return 0; } Output: 1 2 0x8048480 0x8048480

解决方案

答案处处有.
函数名称就是入口地址。

#include

static unsigned int PFN_ARR[100] = { 0 };

void fun1(void);
void fun2(int a);

int main()
{
void (*pfn_fun1)();
fun1();
fun2(5);

pfn_fun1= (void(*)())(PFN_ARR[0]);pfn_fun1();getchar();return 0;

}

void fun1(void)
{
void (*pfn)(void) = fun1;
unsigned int fun_addr = (unsigned int)pfn;
PFN_ARR[0] = fun_addr;
printf(""fun1n"");
}

void fun2(int a)
{
void (*pfn)(int) = fun2;
unsigned int fun_addr = (unsigned int)pfn;
PFN_ARR[1] = fun_addr;
printf(""fun2n"");
}

解决方案二:
void *p = show;
printf(""p = 0X%8Xn"" (int)p);

解决方案三:
函数名,与数组名类似,是指针常量。如
TCHAR tcArray[100];
TCHAR *ptcPoint = tcArray;
TCHAR *ptcPoint2 = (TCHAR *)&tcArray;
TRACE(""0x%X 0x%X 0x%Xrn""tcArrayptcPointptcPoint2);
// 输入是相同的: 0x12EDBC 0x12EDBC 0x12EDBC

解决方案四:
void fun(){
printf(""函数fun的地址 = %x"" fun);
}

解决方案五:
void fun(){
printf(""函数fun的地址 = %p"" fun);
}

解决方案六:
void show(){
printf(""函数fun的地址 = %p"" show);
}

解决方案七:
LZ说的应该是递归调用吧

时间: 2024-09-10 04:35:52

c语言-C语言,如何在一个函数内部,获取这个函数入口点的地址?的相关文章

JavaScript函数内部属性和函数方法实例详解_javascript技巧

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. 函数是对象,有自己的属性和方法 .首先通过console下输出的函数属性方法来直观的看一下: 函数内部属性只要包括两个特殊的对象:arguments和this. 函数属性包括:length和prototype 函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind().toString().toLocaleString().valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两

oracle函数:获取Internet主机名和ip地址

    Oracle包utl_inaddr    作用:用于取得局域网或Internet环境中的主机名和IP地址.    1.utl_inaddr.get_host_address 环境中IP地址    如果查询失败,则提示系统错误    查询www.qq.com的IP地址    select UTL_INADDR.get_host_address('www.qq.com') from dual;    查询本机IP地址    select UTL_INADDR.get_host_address

简单讲解C++的内部和外部函数以及宏的定义_C 语言

C++内部函数和外部函数 函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数只能被本文件调用,而不能被其他文件调用.根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数. 内部函数 如果一个函数只能被本文件中其他函数所调用,它称为内部函数.在定义内部函数时,在函数名和函数类型的前面加static.函数首部的一般格式为: static 类型标识符 函数名(形参表); 如 static int fun(int a, int b); 内部函数又称静态(static)函数.

c语言-C语言数组作为参数传入子函数

问题描述 C语言数组作为参数传入子函数 对不起,可能我没表达清楚,我想问,数组作为参数传入子函数为什么不是作为形式参数传入,请你看程序运行结果,如果数组作为形式参数传入子函数,那么形式参数的值并不会影响原来main函数中的值,但是实际上,main函数中数组原来的值已经被修改了,这是因为数组传入的是地址(指针),我的问题就在这里,传入的是指针为什么不是用完就扔的形式参数. 这与c语言的设计有关是吗?内部有什么机制吗? 解决方案 首先提一下std C 调用约定,参数的传递使用栈. 在传递时首先将参数

C++普通函数指针与成员函数指针实例解析_C 语言

C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数指针则比较陌生.本文即对C++普通函数指针与成员函数指针进行实例解析. 一.普通函数指针 通常我们所说的函数指针指的是指向一般普通函数的指针.和其他指针一样,函数指针指向某种特定类型,所有被同一指针运用的函数必须具有相同的形参类型和返回类型. int (*pf)(int, int); // 声明函数指针 这里,pf指向的函数类型是int (

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

深入浅出剖析C语言函数指针与回调函数(一)

关于静态库和动态库的使用和制作方法. http://blog.csdn.net/morixinguan/article/details/52451612 今天我们要搞明白的一个概念叫回调函数. 什么是回调函数? 百度的权威解释如下: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应.

c语言-求教C语言单项链表逆置NODE * fun(NODE *h)函数每步步骤详细解读

问题描述 求教C语言单项链表逆置NODE * fun(NODE *h)函数每步步骤详细解读 #include #include #define N 5 typedef struct node { int data; struct node next; } NODE; /*********found**********/ NODE * fun(NODE h) { NODE *p, *q, *r; p = h; if (p == NULL) return NULL; q = p->next; p->

为什么这段c语言代码运行后会崩溃?关于strtok函数

问题描述 为什么这段c语言代码运行后会崩溃?关于strtok函数 #include #include //strtok int main() { char *arry = "i love you China"; char *token = strtok( arry, " "); while( token != NULL) { printf("%s", token); token = strtok( NULL, " "); }