我有一个关于将数据(地址表或其他数据)放在.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
部分?静态数据呢?例如,我有 2QWORD
个函数,我必须把它放在那个函数中,或者我必须把它们QWORDs
放在数据部分?为什么 ?我知道如果我把它放在 .data 部分或它的功能下没有问题,但我想知道哪种方式更好?