棧溢位 一 工具和環境

2021-10-19 16:18:13 字數 1792 閱讀 9259

shell命令:

gdb命令

簡單python語法

工具使用

文件與資料

python庫,pip安裝

python2安裝pip

sudo apt-get install lib32z1

sudo apt-get install gcc-multilib

python setup.py install

可能出現錯誤:importerror: no module named 『setuptools』

sudo apt-get install python-setuptools
新增環境變數:

vim ~/.bashrc

export path=$path:/home/lcy/install/ropgadget-master

把ropgadgets的安裝目錄新增到.bashrc

-t: 顯示檔案的符號表入口

-j name: 僅顯示指定name欄位的資訊

如:objdump -j .text main.out

-d: 反彙編**

-s filename 檢視elf檔案區的內容,可用於查詢某個變數位於哪乙個記憶體段。

更多資訊可使用man readelf檢視。

檢視各個位址段有無執行許可權

gdb-peda$ vmmap

start end perm name

0x08048000 0x08049000 r-xp /ret2shellcode/ret2shellcode

0x08049000 0x0804a000 r--p /ret2shellcode/ret2shellcode

0x0804a000 0x0804b000 rw-p /ret2shellcode/ret2shellcode

根據位址下斷點。

根據函式名下斷點。

檢視彙編**

str.ljust(width,fillchar=none)

width

fillchar

字串總長度

填充字元,預設為空字元

使用指定字串(fillchar)填充原字串(str)到指定長度(width)。

如果width小於原字串長度,則返回原字串。

--binary 指定乙個二進位制檔案進行分析。

--only 只顯示指定的部分

--string 在可讀段中搜尋字串

例如:

$ ropgadget --binary rop.out --only "pop|ret" | grep rbp

0x0040124b : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret

0x0040124f : pop rbp ; pop r14 ; pop r15 ; ret

0x0040115d : pop rbp ; ret

$ ropgadget --binary rop.out --string "/bin/sh"

strings information

********************===

0x00402008 : /bin/sh

使用時轉十六進製制:linux系統呼叫號

棧溢位和棧記憶體溢位

棧記憶體溢位是指使用者棧的大小最多為8 10mb,分配超過棧大小的變數則會導致棧記憶體溢位。如char c 1024102411 11mb 棧溢位指的是程式向棧中某個變數中寫入的位元組數超過了這個變數本身所申請的位元組數,因而導致與其相鄰的棧中的變數的值被改變。如char c 10 memset c...

遞迴和棧溢位。

遞迴確實是很多演算法的基礎思想。但外部因素導致遞迴會棧溢位。但卻是不甘心如此簡練的有效的演算法,放棄不用。所以一般有2中方式來使用大資料的遞迴思路 1 用棧型別放入引數,模擬遞迴呼叫。2 把大資料分割為一批適中的資料,就可以直接使用遞迴函式。用快速排序,測試並總結了下。1 本例大概 排序30000個...

什麼是棧溢位和堆溢位

棧溢位是由於c語言系列沒有內建檢查機制來確保複製到緩衝區的資料不得大於緩衝區的大小,因此當這個資料足夠大的時候,將會溢位緩衝區的範圍。堆溢位的產生是由於過多的函式呼叫,導致呼叫堆疊無法容納這些呼叫的返回位址,一般在遞迴中產生。堆溢位很可能由無限遞迴 infinite recursion 產生,但也可...