[Linux C]ELF Trick — 获取程序内的函数名及地址
这一切的起源来自于一个群的对话: B 23:27:38 我定义了一个 C 的函数 abc_hello_world() 然后我想通过命令行通过参数 xxxxx abc hello world 把三个参数,自动作为函数名给弄进去 然后输出 那个函数的执行结果 在 C 里怎么搞啊 首先我们的第一想法都是 “宏” 网络部 R 籓绽23:29:13 我记得宏定义有一种方式可以拼接字符串吧 网络部 R 籓绽23:29:25 我没弄过 窝想想看 A 23:30:05 好像没办法实现这个,编译之后都是二进制了,函数名在优化过程中都没了 A 23:30:26 我试试宏 网络部 R 籓绽23:30:29 宏定义的确可以拼接字符串的说 网络部 R 籓绽 23:30:32 你试试看 然后, 这些抽风的程序员们感觉, 宏这种用法太无趣了(笑) 于是就有了下面这段对话 网络部 R 籓绽23:37:30 知道这个原理我们c就可以实现了吧 A 23:38:09 他是解释器,变量名会一直保存,但是 C 编译后就没有变量名了 网络部 R 籓绽 23:38:47 有的 c可以留符号表的 A 23:39:03 (⊙o⊙)…怎么做 网络部 R 籓绽 23:39:04 我们可不可以查符号表 找地址呢 网络部 R 籓绽 23:39:12 调试信息呀 B 23:39:15 查符号表地址那不就是函数指针了? 网络部 R 籓绽23:39:21 恩 网络部 R 籓绽23:39:31 先查函数名然后 网络部 R 籓绽 23:39:36 找到函数的地址…