Tag: 可执行

从数据部分执行一段代码

我想获取一段代码,将其复制到全局数组中并从那里执行。 换句话说,我试图将一堆指令从代码部分复制到数据部分,然后设置程序计数器以继续从数据部分执行程序。 这是我的代码: #include #include typedef void(*func)(); static void code_section_func() { printf(“hello”); } #define CODE_SIZE 73 // I verified this size in the disassembly of ‘code_section_func’ static long long data[(CODE_SIZE-1)/sizeof(long long)+1]; // I am using ‘long long’ in order to obtain the maximum alignment int main() { func data_section_func = (func)data; memcpy((void*)data_section_func,(void*)code_section_func,CODE_SIZE); data_section_func(); return 0; […]

可执行文件中全局const变量的偏移量

希望有一个可执行文件通过修改自己的全局常量来保存其状态。 只是为了拥有一个完全独立的可执行文件。 想到的一些解决方案/黑客: 使用libelf并让程序解析自己以找到偏移量。 添加特定标记,然后在可执行文件中搜索它。 我想这甚至可能有点跨平台? 使用对象转储工具来确定可执行文件中的地址。 这可能需要始终作为项目构建的后期处理来完成。 让链接器提供此信息是很好的。 是否可以让链接器提供可执行文件中只读部分的偏移量? 谢谢

可执行文件的大小?

我创建了一个非常小的代码来添加两个整数,并将结果保存在另一个变量中,包括汇编语言和c语言。 程序集中的代码花费了我617个字节,但C中的代码需要25k字节!! 为什么会有巨大差异? 另外,我如何查看我编写的C代码的程序集符号指令?

确定C可执行文件名称

当我们编译C程序时,输出存储在a.out中。 我们如何将编译后的输出重定向到另一个文件?

如何让gcc只生成可以直接加载到内存并执行的机器代码?

我想生成一个可以加载到内存中的文件(例如使用mmap ),然后跳转到该内存的开头来运行代码。 理想情况下,我希望选择使代码可重定位(可能效率低下)或指定代码期望加载的显式地址(这很痛苦),但任何一个都可能自行正常工作。