gpt4 book ai didi

汇编函数地址表和函数下或数据段中的数据

转载 作者:行者123 更新时间:2023-12-04 16:23:08 25 4
gpt4 key购买 nike

我对将数据(地址表或其他数据)放在其功能下的 .text 部分还是放在 .data 部分有疑问?例如,我有这样的功能:

extern int i0();
extern int i1();
extern int i2();
extern int i3();
extern int i4();
extern int i5();

void fff(int x) {
switch (x) {
case 0:
i0();
break;
case 1:
i1();
break;
case 2:
i2();
break;
case 3:
i3();
break;
case 4:
i4();
break;
case 5:
i5();
break;
}
}

这里是汇编,这是我的代码:

fff:
cmp edi, 5
ja .L10
mov edi, edi
xor eax, eax
jmp [QWORD PTR .L4[0+rdi*8]]
.L4:
.quad .L9
.quad .L8
.quad .L7
.quad .L6
.quad .L5
.quad .L3
.L5:
jmp i4
.L3:
jmp i5
.L9:
jmp i0
.L8:
jmp i1
.L7:
jmp i2
.L6:
jmp i3
.L10:
ret

这里我有 .L4 保存跳转地址...我应该把这个 .L4 表放在哪里?在 fff 函数下还是我必须把它放在 .data 部分?静态数据呢?例如,我有 2 个 QWORD 用于一个函数,我必须把它放在那个函数中,或者我必须把那些 QWORDs 放在数据部分?为什么 ?我知道我把它放在.data部分或者它的function下面是没有问题的,但是我想知道哪种方式更好?

最佳答案

.data 部分通常是可写的,您不希望跳转表被意外或恶意覆盖。所以 .data 并不是最适合它的地方。

.text 就可以了;它通常是只读的。它是否在功能附近并不重要。许多系统都有一个只读且不可执行的 .rodata 部分,这会更好;这将有助于捕获意外或故意尝试执行跳转表字节的错误或攻击。

关于汇编函数地址表和函数下或数据段中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69772172/

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