概述
- 本文例子均來自《IDA PRO 權威指南》第八章第一節
- 閱讀前需要掌握基本的彙編指令
例子
1、全局分配的數組
int global_array[3];
int main() {
int idx = 2;
global_array[0] = 10;
global_array[1] = 20;
global_array[2] = 30;
global_array[idx] = 40;
}
- 全局變量存在.data或者.bss節內
- 在使用ida反彙編的時候沒辦法知道數據到底是不是數組,要自己分析
2、棧分配的數組
int main() {
int stack_array[3];
int idx = 2;
stack_array[0] = 10;
stack_array[1] = 20;
stack_array[2] = 30;
stack_array[idx] = 40;
}
- array[0](var_10,-10h)儲存數組內第一個數的偏移量
- 通過idx的賦值位置,可以分析出數組的大小,(10h-4h)/4h=3
3、堆分配數組
#include <stdlib.h>
int main() {
int *heap_array = (int*)malloc(3 * sizeof(int));
int idx = 2;
heap_array[0] = 10;
heap_array[1] = 20;
heap_array[2] = 30;
heap_array[idx] = 40;
}
- 不太明白書中說的爲什麼每次訪問數組的時候都要進行一次array地址的讀取,執行完之後array的地址應該是已經確定了的,頻繁的讀取[ebp+array]不知道爲什麼
總結
- 都很容易看出每個元素大小
- 在不知道源碼的情況下並不能很快人出是數組