freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

watercloud@xfocusorg-文庫吧

2025-07-29 14:23 本頁面


【正文】 OPY %r1,%r3 %r3=%r1 LDW 50(%sr0,%sp), %r10 將變量放入 %r10中。 數(shù)據(jù)操作指令實例 數(shù)據(jù)操作指令實例 平時在反匯編中注意這兩句: STW %rp, 20(%sr0,%sp) 將返回地址寄存器存放到棧中,函數(shù)通常在開始處保存自己的返回地址。 STW,m %r3, 0xC0(%sr0,%sp) 將 %r3存入棧中,同時將棧指針 %sp加 0xC0(注意那個 m),函數(shù)基本都在開始處使用這條指令來給自己分配??臻g。 如果想將一個 32位數(shù)存放到寄存器中需要兩條指令完成: LDIL L’var, %r1 LDO R’var(%r1), %r3 其中 L’var 表示取 var的高 21為作為一個數(shù)字。 R’表示低 11位。 延時插槽 延時插槽 ( Delay Slot ) 和很多 RISC系統(tǒng)一樣 PA的分支指令都有一個延時問題,考察: 1. B,L sub_test, %r31 2. Copy %r31,%rp 3. Copy %r28,%r26 其執(zhí)行流程為: ? 執(zhí)行到 1處發(fā)現(xiàn)跳轉(zhuǎn),于是將返回地址放入 %r31,但返回地址為地址 3。 ? 程序并沒有立即跳轉(zhuǎn),而是緊接著執(zhí)行地址 2處的指令將返回地址拷貝到了寄存器 RP。 ? 然后跳轉(zhuǎn)到 sub_test處執(zhí)行。 ? 函數(shù) sub_test返回,程序從地址 3處開始執(zhí)行將函數(shù)返回值拷貝到寄存器 %r26。 三 、 運行時體系結(jié)構(gòu) 三 運行時體系結(jié)構(gòu) (Runtime Architecthure) 熟悉 PA結(jié)構(gòu)及各個指令能幫助我們輕松的看懂反匯編和跟蹤調(diào)試程序以及編寫更加有效的 shellcode,而越多的了解運行時體系結(jié)構(gòu)就越能夠幫助我們編寫利用程序。 運行時體系結(jié)構(gòu)主要包括以下幾個方面: ? 空間布局 ? 函數(shù)調(diào)用 ? 系統(tǒng)調(diào)用 程序空間布局 共 享 庫 信 息程 序 代 碼只 讀 數(shù) 據(jù) 區(qū)已 初 始 化 數(shù) 據(jù) 區(qū)函 數(shù) 導(dǎo) 入 表 P L T數(shù) 據(jù) 導(dǎo) 入 表 D L TG L O B A L未 初 始 化 數(shù) 據(jù) 區(qū)堆棧共 享 庫系 統(tǒng) 代 碼共 享 內(nèi) 存 區(qū)S R 4S R 5S R 7程 序 運 行 過 程 中 的 內(nèi) 存 分 部 和 重 要 寄 存 器 值系 統(tǒng) 空 間代 碼 空 間數(shù) 據(jù) 空 間系 統(tǒng) 空 間D PS P0 x 0 0 0 0 0 0 00 x 4 0 0 0 0 0 0 00 x 8 0 0 0 0 0 0 00 x F F F F F F F F3.1 程序空間布局 當(dāng)程序運行起來時其空間布局如下,系統(tǒng)初始化了數(shù)據(jù)指針寄存器DP和空間寄存器 SRSR SR7,及狀態(tài)寄存器 PSW。 函數(shù)調(diào)用的棧分布 函數(shù)調(diào)用的棧分布 c a l l e r ( ){ c a l l e e ( ) 。}棧 幀 標(biāo) 識 區(qū)c a l l e r 的 棧 頂?shù)?地 址高 地 址棧 增 長方 向進(jìn) 入 c a l l e e 后 的 棧 分 布 情 況c a l l e e 的 棧 頂棧 幀 標(biāo) 識 區(qū)參 數(shù) 存 放 區(qū)局 部 變 量 區(qū)對 齊 數(shù) 據(jù)寄 存 器 保 存 區(qū)參 數(shù) 存 放 區(qū)S P局 部 變 量 區(qū). . . . . .c a l l e r 的 棧 區(qū) 間c a l l e e 的 棧 區(qū) 間? 棧增長方向由低向高,和很多系統(tǒng)都不同。 ? 分配??臻g時??臻g大小總是以 64字節(jié)為單位分配的。 ? 寄存器保護(hù)區(qū)用于在函數(shù)入口處保存一些可能會被破壞的寄存器值,以便在函數(shù)退出時恢復(fù)這些寄存器。 ? 對其數(shù)據(jù)起始就是無用數(shù)據(jù)區(qū),由于??臻g大小以 64字節(jié)對齊,就有可能有些地址是不會被使用的。 ? 參數(shù)存放區(qū)和棧幀標(biāo)識區(qū)將在后面專門介紹。 葉子函數(shù) /非葉子函數(shù) 葉子函數(shù)和非葉子函數(shù) 1. 非葉子函數(shù)指內(nèi)部會再調(diào)用其他函數(shù)的函數(shù),如: int callee() { return printf(“Hello World\n”)。 } 2. 葉子函數(shù)指內(nèi)部不會再調(diào)用其他函數(shù)的函數(shù),如: int add(int x,int y) { return x+y。 } 3. 非葉子函數(shù)會在函數(shù)開始處將返回地址存到父函數(shù)的棧中在結(jié)束時讀出并返回這樣我們有利用機會,而葉子函數(shù)不會。 非葉子函數(shù) 非葉子函數(shù) 非葉子函數(shù)在進(jìn)入時會將函數(shù)返回地址存放到父函數(shù)的棧幀標(biāo)識區(qū)中, 返回時再取出來并返回。比如 sprintf函數(shù)是非葉子函數(shù),如果 caller如下 : caller() { char buff[32]。 sprintf(buff,”%s”,用戶輸入的數(shù)據(jù) )。 } 對照函數(shù)棧分布圖我們可以看到 sprintf后 sprintf會首先將返回地址寄存器 %RP存放到 caller的棧幀標(biāo)識區(qū),然后開始往 caller的局部變量區(qū)寫數(shù)據(jù),最后從 caller的棧幀標(biāo)識 區(qū)讀出返回地址然后再跳轉(zhuǎn)到該地址運行。由于沒有檢查用戶輸入長度這樣就能覆 蓋 sprintf在 caller棧幀標(biāo)識區(qū)中存放的返回地址從而修改程序執(zhí)行流程。 葉子函數(shù) 葉子函數(shù) 考察如下函數(shù)如果我們調(diào)用的是 strcpy: caller() { char buff[32]。 strcpy(buff,用戶輸入的數(shù)據(jù) )。 } 這樣也能溢出 caller的 buff數(shù)組,但是由于 strcpy是葉子節(jié)點他不 會使用棧來存放返回地址,因此我們沒有機會修改程序流程。 alloc()函數(shù) alloc()函數(shù) 棧 幀 標(biāo) 識 區(qū)參 數(shù) 存 放 區(qū)局 部 變 量 區(qū)對 齊 數(shù) 據(jù)寄 存 器 保 存 區(qū)棧 幀 標(biāo) 識 區(qū)A l l o c 動 態(tài) 分配 的 空 間局 部 變 量 區(qū)對 齊 數(shù) 據(jù)寄 存 器 保 存 區(qū)參 數(shù) 存 放 區(qū)低 地 址高 地 址v o i d c a l l e e ( ){ c h a r * p = a l l o c ( 2 0 ) 。}a l l o c 調(diào) 用 后 調(diào) 整 棧 空 間進(jìn) 入 函 數(shù) 后 的 棧 空 間對于 alloc分配的空間如果出現(xiàn)溢出就等同局部數(shù)組出現(xiàn)溢出 函數(shù)棧的參數(shù)存放區(qū)和棧幀標(biāo)識區(qū) 函數(shù)棧的參數(shù)存放區(qū)和棧幀標(biāo)識區(qū) c a l l e r ( ){ c a l l e e ( ) 。}棧 幀 標(biāo) 識 區(qū)c a l l e r 的 棧 頂?shù)?地 址高 地 址棧 增 長方 向進(jìn) 入 c a l l e e 后 的 棧 分 布 情 況c a l l e e 的 棧 頂棧 幀 標(biāo) 識 區(qū)參 數(shù) 存 放 區(qū)局 部 變 量 區(qū)對 齊 數(shù) 據(jù)寄 存 器 保 存 區(qū)參 數(shù) 存 放 區(qū)S P局
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1