晚上擺弄的小玩意

2021-08-30 14:15:42 字數 517 閱讀 9236

#include

void p(char* s, int a)

void f(char* s, int a)

int main()

我想用hacker的手段來修改f函式的返回位址,可惜的是一直沒有成功,不過倒是把引數值給改了,列印了hi和2之後就是段錯誤,怎樣解決這個段錯誤,暫還沒有辦法。直接看main函式內生成的彙編碼,並沒有什麼特別之處。但是在f函式裡,b[1]並不是ebp的值,而是乙個莫名其妙的值,不知道是幹什麼的,而b[2]裡面是gcc的global_offset_table,也不知道是幹什麼用的,b[3]才是ebp的值,然後順下來b[4],b[5],b[6]的值都對得上號。

不過修改了f函式的返回位址後,的確是可以正確地跳轉到p裡,還可以執行兩步,但是很快就段錯誤了,可惜gdb生手,調了一上,陷在printf裡面出不來,也不知道這個段錯誤的具體原因。但是,對於這個例子,糾結於細節的意義也不大,關鍵是明白c程式執行時的棧結構,心裡明白,也就可以了。

演算法小玩意

n n的棋盤上擺上n個皇后,使皇后不會相互攻擊。public class nqueenpuzzle 使用棧求解 public void solve stack lastpos.push i lastpos.push 1 break 使用遞迴求解 public void solve sw.elapse...

python小玩意二

建立乙個列表 list1 a b c d e print list1 建立乙個列表 list1 a b c d 2 e print list1 建立乙個列表 list1 a b c d list1.pop print list1 建立乙個列表 list1 a b c d list1.pop 2 pr...

一點小玩意

include include using namespace std define pass what int main 輸出 4 4 4 5 4 4 a a 同樣乙個字串 what 用巨集定義pass之後,pass既可以當做指標用,也可以當做變數名用,而用字串pass定義的話只能用作乙個變數名,...