我在这里添加另一个答案,因为 op 的评论类似于一个新问题
我还是很困惑。如果 ix 对我 >!seek 的点也有很多引用,为什么没有数据和代码?为什么 >! 这些引用会指向填充区域或对齐区域?
这是一个被引用的代码演示,但在引用上执行 pd 会产生一堆零,并且与对齐或任何其他工件无关
C:\evancarr>cat evancarr0.cpp
#include <stdio.h>
#include <windows.h>
char somecipher[MAX_PATH + 1];
char curdir[MAX_PATH + 1];
char deccipher[MAX_PATH + 1];
int main(void) {
GetCurrentDirectoryA(MAX_PATH, curdir);
int cdlen = strlen(curdir);
for (int i = 0; i < cdlen; i++) {
somecipher[i] = curdir[i] ^ 0x1;
}
printf("%s\n", somecipher);
for (int i = 0; i < cdlen; i++) {
deccipher[i] = somecipher[i] ^ 0x1;
}
printf("%s\n", deccipher);
}
编译并执行
C:\evancarr>cl /Zi /W4 /analyze /EHsc /O2 evancarr0.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.12.25835 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
evancarr0.cpp
Microsoft (R) Incremental Linker Version 14.12.25835.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:evancarr0.exe
/debug
evancarr0.obj
C:\evancarr>evancarr0.exe
B;]dw`ob`ss
C:\evancarr
将它加载到radare2 中,寻求main 并在引用的全局缓冲区上做一个pd(可以看出缓冲区有很多外部参照,但它是一堆零,反汇编会抛出一堆 add [eax] , al
C:\evancarr>radare2 -AA evancarr0.exe
[0x004015cd]> s 0x4065a0
[0x004065a0]> pd 5
| ; JMP XREF from 0x00403161 (sub.KERNEL32.dll_GetCurrentDirectoryA_161)
| 0x004065a0 56 push esi
| 0x004065a1 68380d4600 push 0x460d38 <<<<<<<
| 0x004065a6 6804010000 push 0x104 ; 260
| 0x004065ab ff1500304600 call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryA] ;
0x463000
| 0x004065b1 be380d4600 mov esi, 0x460d38
[0x004065a0]> pd 5 @ 0x460d38
; DATA XREF from 0x004065a1
; DATA XREF from 0x004065b1
; DATA XREF from 0x004065f1
; DATA XREF from 0x00406650
; DATA XREF from 0x004065c0
0x00460d38 0000 add byte [eax], al
0x00460d3a 0000 add byte [eax], al
0x00460d3c 0000 add byte [eax], al
0x00460d3e 0000 add byte [eax], al
0x00460d40 0000 add byte [eax], al
[0x004065a0]> pd 5 @ 0x460c30
; DATA XREF from 0x00406658
; DATA XREF from 0x00406663
; DATA XREF from 0x004066a0
; DATA XREF from 0x00406700
; DATA XREF from 0x004065fc
0x00460c30 0000 add byte [eax], al
0x00460c32 0000 add byte [eax], al
0x00460c34 0000 add byte [eax], al
0x00460c36 0000 add byte [eax], al
0x00460c38 0000 add byte [eax], al
[0x004065a0]>