用C(或汇编)编写的程序是否可能使用gcc与c stdlib链接来打印其条目的地址? (因为_start符号实际上表示程序入口,所以我询问是否可以在不使用ELF可执行文件解析的情况下从主函数内部打印该符号的地址)。程序入口自我识别
Q
程序入口自我识别
0
A
回答
1
不是很便携(即作品在我的机器上,但也许这是因为星星排列)
#include <stdio.h>
extern void _start();
int main(int argc,char *argv[])
{
printf("%p\n",_start);
return 0;
}
在RHEL 5.5 x86_64的盒,打印地址的地址切入点匹配的ELF头,如果二进制文件被构建为使用地址空间随机化,那么如果这种情况爆发,我不会感到惊讶。
2
我问你为什么需要这样做,但你有没有尝试过使用dlsym
为你的目的?
+0
我只是想知道它是否可以完成,不知道它是否有实际的方面。 ELF中的dlsym部分是什么? – 2010-11-25 19:13:27
0
没有在任何便携式的方式,没有。
对于已知平台使用程序集,您可能在调用堆栈后退一步,然后将返回地址(如果您的平台使用此类,应该在_start
例程内)写入可从C端访问的变量。
当然,那么你只拥有指令的地址继call
您main()
,而不是的_start
程序的开始。
1
extern void _start();
printf("%p\n", (void *)_start);
这不是在C语言中没有定义这样的东西_start
功能意义上的“便携”,但假设它是实现这种方式,这应该工作。
相关问题
- 1. 识别java程序
- 2. Snoop无法识别我的程序
- 3. 使用两列唯一入口识别
- 4. 识别调用程序
- 5. C#活动程序识别
- 6. 如何识别程序集?
- 7. 识别我的应用程序上的其他应用程序
- 8. 特定的应用程序不能识别一个DLL入口点
- 9. iOS的手写识别应用程序如何识别我的手写?
- 10. 引导程序如何识别移动视口的代码?
- 11. TCP /应用程序层如何识别目标端口号?
- 12. XML序列化程序不识别XmlElements
- 13. 为什么我的程序不能识别我的方法?
- 14. VBA Excel,单元格自我识别
- 15. 自动识别wildfly10
- 16. 无法识别窗口
- 17. 接口无法识别
- 18. 识别活动窗口c#
- 19. 识别模式窗口
- 20. 识别窗口的变体
- 21. 识别输入的转义序列
- 22. 如何让我的Java应用程序在连接时自动识别Oracle?
- 23. 语音识别编程问题入门
- 24. 从语音识别过程输入
- 25. 识别来自JS的Phonegap移动应用程序
- 26. Servlets无法识别来自Android应用程序的会话
- 27. MVC web应用程序无法识别自定义类
- 28. 识别来自用户代理的抓取程序
- 29. phpMyAdmin安装程序无法识别自己的密码
- 30. 注册Outlook识别的自定义URL协议处理程序?
您可以使用内建函数从堆栈帧中获取入口函数中的地址,但不能使用起始地址。 http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html你为什么想要开始地址? – Rup 2010-11-25 14:42:09
`&main`?...... – khachik 2010-11-25 14:43:18