簡體   English   中英

Linux Ubuntu下的Detour功能

[英]Detour function under Linux Ubuntu

我在Windows下使用了Detourshttp://research.microsoft.com/en-us/projects/detours/ ),但是現在我在使用Linux Ubuntu,並且想Detour / Hook a function。 我想繞開要挖掘的功能,然后再調用原始功能。 (我可以鈎住函數,但是之后不能使用原始函數)。

因此,我決定編寫一個繞行功能。 首先,我將函數復制到另一個位置,但無法執行。 您能幫助我,為什么我無法執行? 我遇到了細分錯誤。

我的代碼:

int (* h_Com_Printf)(const char *fmt, ...);
...
void *memBuffer;
int size = 0x4F; // size of the function

memBuffer = (void*)malloc(size);
memcpy(memBuffer, (void*)0x08060DEA, size); // copy the function

h_Com_Printf = (int (*)(const char *fmt, ...))memBuffer;
h_Com_Printf("print function: %d\n", 1); // segmentation fault HERE

謝謝!

“可執行文件”(IDA Pro)中的Com_Printf :圖片: http : //kepfeltoltes.hu/150818/ida_printf_www.kepfeltoltes.hu_.png

Linux在VirtualBox中運行。 (可能是問題嗎?)

僅復制函數字節是不夠的,即使您知道if的確切大小(並非總是如此),因為有很多與EIP相關的指令(例如,在示例中調用_vsnprintf)。 因此,通常要做的事情(實際上是Detours所做的事情)是只復制被鈎子代碼(JMP或CALL)覆蓋的字節,然后重新計算與EIP相關的偏移量。 為此,您需要能夠對指令進行解碼並在必要時重新計算相對偏移量的反匯編程序。 繞道實際上包括一個。 我建議您查看Detours資源,以更好地了解為了放置鈎子所做的工作。

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM