- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 gold
和其他链接器,可以让链接器使用链接器脚本将 .text
部分的开始/结尾作为常量写入二进制文件,例如
PROVIDE_HIDDEN(linker_script_start_of_text = ADDR(.text));
PROVIDE_HIDDEN(linker_script_end_of_text = ADDR(.text) + SIZEOF(.text));
链接到 ld -Tmy_linker_script.lds ...
。
我知道可以调用 getsectdata或类似于获取有关 .text
部分的信息或从 mach-o header 解析它,但是有没有办法让链接器将此数据作为常量插入?
最佳答案
您可以使用 __asm
使 Darwin 链接器插入此数据:
#include <stdio.h>
extern int start_text __asm("section$start$__TEXT$__text");
extern int end_text __asm("section$end$__TEXT$__text");
int main() {
size_t text_section_size_bytes =
(intptr_t)&end_text - (intptr_t)&start_text;
printf("__TEXT.__text section size: 0x%lx\n", text_section_size_bytes);
return 0;
}
在我的机器上,打印出:
$ clang -o test ./test.c
$ ./test
__TEXT.__text section size: 0x43
这与 objdump
报告的内容相匹配:
$ objdump -h ./test
./foo2: file format Mach-O 64-bit x86-64
Sections:
Idx Name Size Address Type
0 __text 00000043 0000000100000f30 TEXT
[...]
您还可以使用语法 segment$start$__TEXT
/ 来获取整个段(相对于部分)的大小段$end$__TEXT
.
关于c - 在 macOS 上的链接时获取 __TEXT 部分的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079951/
升级到 Xcode 4.4 后,当我尝试在 iPhone 或 iPad 上运行我的(通用)应用程序时,我遇到了这个烦人的链接器错误。如果我在 iOS 模拟器上运行它,我没有问题... 我尝试添加 ar
使用 gold 和其他链接器,可以让链接器使用链接器脚本将 .text 部分的开始/结尾作为常量写入二进制文件,例如 PROVIDE_HIDDEN(linker_script_start_of_tex
我已经尝试了很多来最终让它工作,但它仍然无法工作。我试图更改 __TEXT 部分中的一些变量,默认情况下它是只读的,例如更改 cryptid(和其他内容) 它有点像以前工作,回到 32 位设备上。但是
在 OS X 上使用 MacPorts GCC 并通过 -Wa,-q 使用 Clang 集成汇编器时,汇编器会为每个文件生成一个警告流。下面显示了警告的示例(其中太多,Stack Overflow 编
为了找到我的 mach-o 可执行文件的 __TEXT 和 __DATA 的 dyld 地址映射,我设置了环境变量 DYLD_PRINT_SEGMENTS=1。这将记录在可执行文件映射到内存中的控制台
如何将部分从 __TEXT 段中移出并移入 mach-o 二进制文件的新段中?我问的原因是我试图让我的 iPhone 应用程序更小,并且 iOS App Store 在压缩之前加密了它的 __TEXT
我正在尝试从 iPhone Mach-O 二进制文件中读取常量(或初始化)字符串。我知道 3 个相关的 segment.sections 是 _TEXT._cstring _TEXT._ustring
我正在使用 -sectcreate __TEXT 链接器标志将可执行文件与 plist 链接起来。这样做的原因主要是使用了 SMJobBless() 方法。但我需要阅读从另一个应用程序链接的 plis
某些程序(甚至操作系统本身)是否出于某种原因更改了可执行文件的 __TEXT 段的内容? 注意:在这里,我指的是“__TEXT”部分,而不是“__text”部分。 换句话说:我能否依靠我的可执行文件的
尝试运行简单的 HelloWorld Unix 可执行文件时: #include using namespace std; int main() { cout working) publi
我是一名优秀的程序员,十分优秀!