1樓:RednaxelaFX
請問題主的意思是類似這樣的場景麼?
#include
#include
#include
typedef
int(
*binary_func_t
)(int
,int
);int
main();
char
*code_buf
=mmap
(NULL
,sizeof
(code
),PROT_READ
|PROT_WRITE
,MAP_PRIVATE
|MAP_ANON,-
1,0);
memcpy
(code_buf
,code
,sizeof
(code
));mprotect
(code_buf
,sizeof
(code
),PROT_READ
|PROT_EXEC
);binary_func_t
max=
(binary_func_t
)code_buf
;intn=
max(3,
42);
printf
("max(3, 42) = %d\n"
,n);munmap
(code_buf
,sizeof
(code
));return0;
}// Use MAP_ANON instead of MAP_ANONYMOUS on Mac OS X
這是我在Mac OS X / x86-64上寫的個小測試。對應Windows上的話 mmap -> VirtualAlloc,mprotect -> VirtualProtect。
如果是這樣的場景的話,題主想問的是在我的例子中 max(3, 42) 那裡引數是如何傳遞過去的麼?其實沒啥特別的,就是按照給定的calling convention來啊。
我的例子裡就是用預設的System V ABI的calling convention,兩個引數分別從RDI、RSI傳遞,返回值從RAX傳遞。
題主在Windows上實驗的話,那麼就參考您的程式設計環境裡的預設calling convention來搞就好了。
如果題主沒留意過的話,其實函式指標型別上是可以宣告calling convention修飾符的,不寫就是用預設的calling convention。例如說:
typedef
int(
__stdcall
*binary_func_t
)(int
,int
);typedef
int(
__cdecl
*binary_func_t
)(int
,int
);typedef
int(
__fastcall
*binary_func_t
)(int
,int
);等等。這樣就可以根據目標函式的實現狀況來在caller一側選擇合適的calling convention與之匹配了。
感覺談了一段被父母否定的戀愛後,我變了,感覺家很陌生,以前快樂很簡單,現在時常有抑鬱傾向怎麼辦?
陽明瓦拉 無條件的信任父母,依賴對方的愛,當然是簡單而快樂的生活。就好像乙隻上帝的寵物,要什麼有什麼,你需要做的只是聽話就好了。什麼遠慮近憂 什麼存在的意義,那不是你的需要。這種時候你的生活除了簡單快樂還能有什麼呢?直到有一天,因為愛情,你不聽話了。你反叛了。到這時候,你才發現原來父母不像你以為的那...
怎樣從一段不應該開始的感情中走出來?
我覺得你選擇男人的眼光很差,而且不自愛。明知道是錯的還這樣做,出軌就是出軌,背叛就是背叛,再怎麼找理由也是於事無補。你和你老公鬧分手他氣不過找了個新歡來氣你?這都什麼亂七八糟的,我都看蒙了。對待感情婚姻一點也不成熟,還要孩子.自己先活明白吧。 山野草民 我很疑惑,兩個對待婚姻 對待男女關係是如此草率...
在經歷一段愛到死去活來的戀愛後,怎樣從失戀的陰影中走出來?
礎潤而雨 萬事皆可爭取,除了感情。建議,多放開視野,拓展興趣愛好。如果沒有,就專注工作,事業,好歹能賺點錢。再沒有,就學一技之長,來完善自己。總之不能讓自己閒著,越忙越好。 如初 我也不知道這個問題的標準答案是什麼,我的親身經歷我只能說在時間裡慢慢熬,時間長一些感受淡一些,距離失戀目前已經九個月多,...