天天看點

c++ 向量的值逆序輸出_c++逆向 vector

最近弄Android c/c++方面的逆向,發現c++的類,stl模闆,在逆向的時候相比c語言都帶來了不小的困難。

今天自己寫了個小程式,然後逆向分析了一下

vector array_int;

array_int.push_back(1);

array_int.push_back(2);

array_int.push_back(5);

定義一個vector,然後添加資料。

ida反彙編如下:(已添加注釋)

. int_tmp = -0x18

. vector_ptr = -0x14

. var_8 = -

.

. PUSH {R4-R7,LR}

. LDR R5, =(__stack_chk_guard_ptr - 0x1170)

. SUB SP, SP, #0x1C

.

.text:0000116C ADD R5, PC ; __stack_chk_guard_ptr

.text:0000116E LDR R5, [R5] ; __stack_chk_guard

. ADD R6, SP, #0x1C+vector_ptr

. ; [SP,#0x1C+int_tmp]

. LDR R3, [R5]

. MOVS R0, R6

. STR R3, [SP,#0x1C+var_8]

.

.text:0000117C MOVS R1, R7

.text:0000117E STR R3, [SP,#0x1C+int_tmp]

. STR R4, [SP,#0x1C+vector_ptr]

. ]

. ]

. BL _ZNSt6vectorIiSaIiEE9push_backERKi ; std::vector>::push_back(int const&)

.

.text:0000118C MOVS R0, R6

.text:0000118E MOVS R1, R7

. STR R3, [SP,#0x1C+int_tmp]

. BL _ZNSt6vectorIiSaIiEE9push_backERKi ; std::vector>::push_back(int const&)

. MOVS R3, #

. MOVS R0, R6

.text:0000119A MOVS R1, R7

.text:0000119C STR R3, [SP,#0x1C+int_tmp]

.text:0000119E BL _ZNSt6vectorIiSaIiEE9push_backERKi ; std::vector>::push_back(int const&)

分析如下:

. ADD R6, SP, #0x1C+vector_ptr

将棧的vector_ptr處的位址複制給R6

. ; [SP,#0x1C+int_tmp]

将sp+4的位址指派給R7 ,這個位址相當于棧的int_tmp處

. MOVS R0, R6

将vector_ptr的位址指派給R0,作為push_back的第一個參數

.(順序已調整,看位址号)

.

.text:0000117C MOVS R1, R7

.text:0000117E STR R3, [SP,#0x1C+int_tmp]

. STR R4, [SP,#0x1C+vector_ptr]

将要push_back的int值1儲存到棧的int_tmp處。将R7指派給R1,作為push_back的第二個參數,第一個參數為vector對象指針,也就是this指針。

将vector_ptr處指派為0。

. ]

. ]

将vector_ptr處的後兩個棧中的項指派為0,其中[R6,#4]處儲存的是vector中的最後一項元素的下一項的指針,相當于end()。

而[R6,#8]處的值也會随着一次次push_back發生改變,暫時沒有發現其作用

. BL _ZNSt6vectorIiSaIiEE9push_backERKi ; std::vector>::push_back(int const&)

執行push_back(R0,R1)

這是R0裡邊為vector_ptr的位址(位址處的值為0),R1為int_tmp的位址(位址處的值為要添加的資料1)

執行完這一句時,vector_ptr位址的處的值将被修改為對象array_int的位址。

在以後的每次push_back()操作,vector_ptr處,vector_ptr+4處,vector_ptr+8處的值都會變化。

對應的函數原型為push_back(vector*,int*)

調試結果:

第一次push_back

c++ 向量的值逆序輸出_c++逆向 vector

第二次push_back

c++ 向量的值逆序輸出_c++逆向 vector

第三次push_back

c++ 向量的值逆序輸出_c++逆向 vector

最後附上循環列印的代碼

for (vector::size_type i = 0; i < array_int.size(); ++i) {

cout<

}

c++ 向量的值逆序輸出_c++逆向 vector

整個循環過程就比較容易了解了.

c&plus;&plus;轉載系列 std&colon;&colon;vector模闆庫用法介紹

來源:http://blog.csdn.net/phoebin/article/details/3864590 介紹 這篇文章的目的是為了介紹std::vector,如何恰當地使用它們的成員函數等操作 ...

Java中vector的使用詳解

Vector 可實作自動增長的對象數組. java.util.vector提供了向量類(vector)以實作類似動态數組的功能.在Java語言中沒有指針的概念,但如果正确靈活地使用指針又确實可以大大提 ...

C&plus;&plus; 中的std&colon;&colon;vector介紹&lpar;轉&rpar;

vector是C++标準模闆庫中的部分内容,它是一個多功能的,能夠操作多種資料結構和算法的模闆類和函數庫.vector之是以被認為是一個容器,是因為它能夠像容器一樣存放各種類型的對象,簡單地說,vec ...

c&plus;&plus;中vector的用法詳解

c++中vector的用法詳解 vector(向量): C++中的一種資料結構,确切的說是一個類.它相當于一個動态的數組,當程式員無法知道自己需要的數組的規模多大時,用其來解決問題可以達到最大節約空間 ...

vector algorithm find

本來想着申請了部落格園以後 我要寫的部落格都必須是有深度有内涵的...好吧 結果我隻能說我想多了 還是得一步一步慢慢來 最近國小期的任務是要做一個學校食堂餐卡管理系統     有“嚴重拖延症”的我  果然 ...

C&plus;&plus;中 vector(容器)的用法

vector(向量): C++中的一種資料結構,确切的說是一個類.它相當于一個動态的數組,當程式員無法知道自己需要的數組的規模多大時,用其來解決問題可以達到最大節約空間的目的. 用法: 1.檔案包含: ...

C&plus;&plus;中vector的用法

C++内置的數組支援容器的機制,但是它不支援容器抽象的語義.要解決此問題我們自己實作這樣的類.在标準C++中,用容器向量(vector)實作.容器向量也是一個類模闆.标準庫vector類型使用需要的頭 ...

STL vector

STL vector vector是線性容器,它的元素嚴格的按照線性序列排序,和動态數組很相似,和數組一樣,它的元素存儲在一塊連續的存儲空間中,這也意味着我們不僅可以使用疊代器(iterator)通路 ...

STL vector用法介紹

STL vector用法介紹 介紹 這篇文章的目的是為了介紹std::vector,如何恰當地使用它們的成員函數等操作.本文中還讨論了條件函數和函數指針在疊代算法中使用,如在remove_if()和f ...

随機推薦

java布局學習 (三)

前文已經講了常用的4個布局了,今天再介紹最後的三個布局: 5.CardLayout 6.BoxLayout 7.空白布局null (五)CardLayout   紙牌布局 首先這種布局不是二維布局,而 ...

&period;Net簡單圖檔系統-本地存儲和分布式存儲

本地存儲 所謂本地存儲就是将上傳圖檔儲存到圖檔伺服器的本地磁盤上. if (ConfigHelper.GetConfigString("SaveMode") == "Lo ...

設定MySQL自動增長從某個指定的數開始

自增字段,一定要設定為primary key. 以指定從1000開始為例.1 建立表的時候就設定: CREATE TABLE `Test` ( `ID` int(11) NOT NULL AUTO_I ...

C語言頭檔案的使用與寫法

C語言中的.h檔案和我認識由來已久,其使用方法雖不十分複雜,但我卻是經過了幾個月的“不懂”時期,幾年的“一知半解”時期才逐漸認識清楚他的本來面目.揪其原因,我的驽鈍和好學而不求甚解固然是原因之一,但另 ...

機器學習實驗一SVM分類實驗

一.實驗目的和内容 (一)實驗目的 1.熟悉支援向量機SVM(Support Vector Machine)模型分類算法的使用. 2.用svm-train中提供的代碼架構(填入SVM分類器代碼)用tr ...

Ansible 系列之 Patterns

Ansible 之 Patterns 1.Ansible中的Patterns決定了我們要管理哪個主機,意思是與哪些主機進行互動. 我們将在Ad-Hoc(Ad-Hoc 是指 臨時執行的指令,要結合着子產品 ...

ARMCC和GCC編譯ARM代碼的軟浮點和硬浮點問題 【轉】

轉自:http://houh-1984.blog.163.com/blog/static/31127834201211112129167/ 本文介紹了ARM代碼編譯時的軟浮點(soft-float)和 ...

TEdit的 Clear 和 指派 &&num;39&semi;&&num;39&semi;

function TControl.GetText: TCaption; var Len: Integer; begin Len := GetTextLen; SetString(Result, PC ...

python&plus;webdriver&comma;選取Select下拉框中的值

在選擇下拉框中的值時遇到了困難,用driver.find_element_by_id("").send_keys("")進行指派不能成功擷取下拉框中的值.   ...

軟體工程-東北師大站-第十二次作業(PSP)

1.本周PSP 2.本周進度條 3.本周累計進度圖 代碼累計折線圖 博文字數累計折線圖 4.本周PSP餅狀圖