elf相关内容
我正在尝试将一个C程序缩小到1KB大小。我快完成了,但是我被困在编辑我的ELF可执行文件上了。我的程序main.c如下所示: #include #include void _start() { const char msg [] = "Hello World!"; syscall(SYS_write, 0, msg, siz
..
我刚刚使用编译器选项“-fRecords-GCC-Switches”编译了代码,以查看编译器自动选择了哪些选项。现在我可以看到.GCC.command.line部分中的选项。有几个看似合理的编译器选项,但也有一个我找不到任何文档。-auxbase-strip png.o是什么意思。显然,它与png.o有关,但它到底是做什么的? 推荐答案 谷歌搜索shows: Hei Chan:
..
我有一个500MB的文件,其中包含一些自定义数据(即ZIP存档)。我希望将其嵌入到我的ELF可执行文件中,以便在分发ELF文件时,我只能发送1个文件,而不是2个文件。 问题是,当我的应用程序启动时,我不希望操作系统自动加载这个500MB的ZIP数据。我希望我的应用程序打开它自己的文件,找到数据,并以这种“懒惰”的方式使用这些数据。 在Windows上,可以将这个500MB的ZIP文件放到PE资
..
我正在尝试理解ELF格式,现在我对程序头中定义的片段有一些不了解的地方。我使用g++(Linux上的x86_x64)将此小代码转换为ELF文件: #include #include using namespace std; int main(int argc, char *argv[]) { if (argc == 1) {
..
来自维基可执行和可链接格式: 段包含文件运行时执行所需的信息,而节包含用于链接和重定位的重要数据.整个文件中的任何字节最多只能被一个节拥有,并且可以有不属于任何节的孤儿字节. 但是section和segment有什么区别呢?在一个可执行的 ELF 文件中,一个段是否包含一个或多个节? 解决方案 但是section和segment有什么区别呢? 正是您引用的内容:段包含
..
这是我在 Mac OS X 上使用 clang++ 时遇到的问题的缩小版本.经过认真编辑,以更好地反映真正的问题(描述问题的第一次尝试没有表现出问题). 失败 我在 C++ 中有这么大的软件,在目标文件中有大量符号,所以我使用 -fvisibility=hidden 来保持我的符号表很小.众所周知,在这种情况下,必须特别注意 vtables,我想我面临这个问题.但是,我不知道如何以一种
..
当编译 C 程序并创建目标文件 (ELF) 时.目标文件包含不同的部分,例如 bss、数据、文本和其他段.我知道 ELF 的这些部分是虚拟内存地址空间的一部分.我对吗?如果我错了,请纠正我. 另外,编译后的程序会有一个虚拟内存和页表.页表在加载程序时将 ELF 中存在的虚拟内存地址与实际物理内存地址相关联.我的理解正确吗? 我在创建的 ELF 文件中读到,bss 部分只保留未初始化的全
..
当我将 Fedora 28 的 /usr/bin/ls 文件加载到 GDB 中时,我可以访问符号 abformat_init,即使它不是作为字符串也不是在二进制文件的符号表中. $ 文件/usr/bin/ls/usr/bin/ls:ELF 64 位 LSB 共享对象,x86-64,版本 1 (SYSV),动态链接,解释器/lib64/ld-linux-x86-64.so.2,用于 GNU/Lin
..
根据我关于手动生成核心转储文件的问题,我决定深入研究进去弄脏我的手. 我能够构建基本的核心转储结构并将死程序的内存重新放入大 LOAD 部分中的核心转储中.在 GDB 中调试时,我的变量又回来了,这没问题.棘手的部分来了,我如何让 GDB 检索有关程序崩溃时所在位置的信息. 我知道核心转储的注释部分包含此信息(cpu 寄存器等).这是 objdump -h 为“真正的"核心转储提供的内
..
没有深入挖掘 GDB 源代码,我在哪里可以找到有关用于创建核心文件的格式的文档? ELF 规范使核心文件格式保持开放,所以我想这应该是一部分GDB 规范!遗憾的是,我没有从 GNU 的 gdb 文档中找到这方面的任何帮助. 这就是我想要做的事情:将虚拟地址映射到包含正在运行的进程的可执行文件/库中的函数名称.为此,我首先想从核心文件中找出从虚拟地址空间到可执行文件/库名称的映射,然后挖
..
我正在使用 GNU 作为基于 ARM Cortex-M3 的微控制器(Thumb 2 指令集)的汇编程序. 在一些示例代码中,我发现像 .size、.section 和 .type 这样的指令是 ELF 指令.举个例子: .section .text.Reset_Handler.weak Reset_Handler.type Reset_Handler, %function重置处理程序:
..
编辑(更新问题) 我有一个简单的 C 程序: //知道代码是什么并不重要,你可以跳过代码 main.c #include 无符号整数 AppCtr;无符号字符 AppFlag;诠释 SOME_LARGE_VARIABLE;静态无效应用程序测试(无效);无效主要(无效){AppCtr = 0;应用标志 = 0;应用测试();}静态无效Foo(无效){SOME_LARGE
..
我在哪里可以找到我的 Linux 系统上批准/支持的可执行格式列表?我期待找到一个包含 ELF、Shebang、a.out 等的列表.我已经知道我可以在 /proc/sys/fs/binfmt_misc 中找到用户添加的支持格式列表,但我想查看系统中的内置格式.我在哪里可以买到? 解决方案 内核配置文件有一个名为可执行文件格式/仿真的部分.该文件在某些 Linux 发行版(例如 Fed
..
我刚刚安装了 CentOS 6 64 位版本,我正在尝试在 64 位机器上安装 32 位应用程序并收到此错误: /lib/ld-linux.so.2:错误的 ELF 解释器:没有这样的文件或目录 我是 Linux 新手.我该如何解决这个问题? 解决方案 您使用的是 64 位系统,并且没有安装 32 位库支持. 安装(基线)对 32 位可执行文件的支持 (如果您在设置
..
在理解二进制文件(虚拟内存布局、执行等)的过程中,我编写了一个 C 代码,它声明了一个包含可执行代码字节的全局字符串,然后我通过在 main() 中声明一个指针 (PTR),使用一个简单的技巧将 main() 函数的返回地址覆盖到该可执行代码这是在堆栈上保留的本地内存区域 2 WORDS 远离 main() 的返回地址,所以我所做的就是将返回地址的地址分配给该指针 (PTR=(int*)&PTR+
..
来自 Portable Executable 和 Windows 我正在尝试在 Linux (Ubuntu AMD64) 中使用 NASM 创建一个小型 ELF 可执行文件.我的一小段代码如下所示: BITS 64;可执行文件链接的默认虚拟地址_START_VAD 等于 0x400000;这里我一个字节一个字节地写标题ELF_HEADER:.ident_magic db 0x7f,“ELF".i
..
所以我有以下程序: int main(){char* one = "计算机";char 二[] = "另一个";二[1]='b';一个[1]='b';返回0;} 它在 "one[1]='b'" 行上出现段错误,这是有道理的,因为指针 "one" 指向的内存必须在只读内存中.但是,问题是为什么“two[1]='b'"行没有段错误?查看 gcc 的程序集输出: .file "one.c".sec
..
我想将一些用户定义的数据放入自定义部分,以供应用程序和离线分析器同时读取.假设以下示例: const int* get_data(){__attribute__((section(".custom")))静态常量 int 数据 = 123;返回&数据;}内联常量 int* inline_get_data(){__attribute__((section(".custom")))静态常量 int
..
有很多 PE 文件浏览器.如果您有兴趣,这里有一个不错的列表: PE 文件格式查看器: PE 浏览器 http://www.pe-explorer.com/ PE 观点:http://www.magma.ca/~wjr/PEBrowse 专业版 http://www.smidgeonsoft.prohosting.com/pebrowse-pro-file-viewer.html
..
我最近在 GNU ld 中发现了链接器选项“-Bsymbolic-functions": -Bsymbolic创建共享库时,将对全局符号的引用绑定到共享库中的定义(如果有).正常情况下是可以的对于链接到共享库的程序以覆盖定义在共享库中.此选项仅在支持共享库的 ELF 平台上有意义.-Bsymbolic-functions创建共享库时,将引用绑定到全局函数符号到共享库中的定义(如果有).此选项仅在
..