gpt4 book ai didi

您可以使用 objdump 在函数中找到局部字符数组的内存吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:27 27 4
gpt4 key购买 nike

如果我在一个函数中定义一个本地字符数组,然后使用 objdump 获取该特定函数的汇编代码,我能否在汇编代码中找到该数组的内存?

这是我的家庭作业问题。

最佳答案

当然,只要您的数组具有非零初始值设定项,您就应该能够找到它。这是我为 ARM 制作的示例:

char function(int i)
{
char arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
return arr[i];
}

构建它:

$ clang -O2 -Wall -c -o example.o example.c

反汇编输出:

$ objdump -d example.o

example.o: file format elf32-littlearm


Disassembly of section .text:

00000000 <function>:
0: e59f1004 ldr r1, [pc, #4] ; c <function+0xc>
4: e7d10000 ldrb r0, [r1, r0]
8: e12fff1e bx lr
c: 00000000 .word 0x00000000

嗯 - 注意 .word 0x0000000 在偏移量 0xc 处?这将由链接器修复以指向数组。我们去看看重定位表:

$ objdump -r example.o 

example.o: file format elf32-littlearm

RELOCATION RECORDS FOR [.text]:
OFFSET TYPE VALUE
00000008 R_ARM_V4BX *ABS*
0000000c R_ARM_ABS32 .rodata.cst8

啊哈! 0xc 处的单词将被固定为指向 .rodata.cst8 部分的绝对指针 - 这听起来像我们想要的。让我们来看看:

$ objdump -s -j .rodata.cst8  example.o 

example.o: file format elf32-littlearm

Contents of section .rodata.cst8:
0000 01020304 05060708 ........

这就是数组的内容!

关于您可以使用 objdump 在函数中找到局部字符数组的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17899798/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com