全局分配數組、棧分配數組、堆分配數組在IDA反彙編中的不同——《IDA權威指南》例子嘗試

概述

  • 本文例子均來自《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]不知道爲什麼

總結

  • 都很容易看出每個元素大小
  • 在不知道源碼的情況下並不能很快人出是數組
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章