看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 補充說明(Supplement): 問題不太會描述 請多見諒 目標是希望可以讀到函式參數的值 但不直接使用參數名 void fun1(int a, int b) { int c,d; c=???????? (將a的值10存到c 但是不須要寫出a ) d=???????? (將b的值20存到d 但是不須要寫出b ) } void main() { fun(10,20); } 希望有高手可以幫我解惑 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.240.24 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1403019778.A.8C1.html
azureblaze:undefined behavior 06/17 23:50
Nathan8489:???????? 06/17 23:52
azureblaze:開組語看a放什麼地方撈出來,然後祈禱compiler不要亂搞 06/17 23:53
azureblaze:還有祈禱complier不要直接把a丟掉 06/17 23:55
chuckAI:我似乎是遇到azu大說的問題 有讀到a的位置 但compiler後會 06/17 23:59
chuckAI:會跑掉 06/17 23:59
azureblaze:有什麼特別的理由需要這樣做嗎? 06/18 00:05
chuckAI:因為有大量的函式需要紀錄下裡面那些參數 但每個函式參數 06/18 00:24
chuckAI:名子卻又都不一樣 改起來工程浩大 06/18 00:25
purpose:用 regular expression 抓就好了 06/18 00:45
AstralBrain:這種事交給gdb吧 06/18 01:10
elfkiller:是要自己寫debugger? 06/18 02:23
Killercat:這看起來會因為call convention不同而必須有不同做法 06/18 03:06
Killercat:不過我覺得頗難 一來是function本身拿不到自己的pointer 06/18 03:09
Killercat:所以沒辦法hack自家的stack,二來則是我想就算拿的到 06/18 03:10
Killercat:應該也只有stdcall做的到你說的事情 06/18 03:10
Killercat:cdecl的話因為stack在caller那裡管 callee(以本例來講 06/18 03:11
Killercat:就是function自己)是沒辦法直接從記憶體hack到參數位置 06/18 03:11
Killercat:hum...stdarg搞不好可以在cdecl下做到 06/18 03:34
Killercat:gcc.gnu.org/onlinedocs/gcc/Return-Address.html 06/18 03:46
Killercat:__builtin_frame_address 這樣也許能抓 06/18 03:47
Killercat:ok 上面是正確解答 我回一篇給你 06/18 04:16
Killercat:http://tinyurl.com/kk3etza mac跑是對的 centos跑是錯 06/18 04:26
Killercat:的,看起來這不是通解.... 傷腦筋 06/18 04:26
h520:calling 兩個(動)名詞放一起 前面那個會隱式轉型當adj來用 06/18 17:02
LPH66:隱式轉型 XDDD 06/18 18:19
lc85301:幹嘛跟自己過不去XDD 06/19 10:43
michael0728n:看完討論怎麼感覺一個一個手動改變數工程可能小些XD 06/19 18:16