cdecl

    2熱度

    2回答

    我正在使用visual studio處理現有的C++項目,並且我發現幾乎每個函數聲明都在函數名前面有一個__cdecl,如:void __cdecl functionName()。然後我跳到的__cdecl的定義,其定位在winnt.h文件: #if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) #define NTAPI __stdcall

    0熱度

    1回答

    我正在開發一個項目,其中有一些傳感器,我希望它們通過USB連接到PC。現在他們寫了一個用lib編寫的windows lib,並且所有函數都使用c的cdecl調用約定,而且我必須確定,如果我使用其他語言(java!)編程,則會給出調用約定。 所以我研究了一下,發現了一些教程來綁定dll在java中或使用JNA。但這對我來說都是新事物,我想確定它是可能的(也可能是一個例子) - 該設備並不便宜,我想在

    0熱度

    1回答

    在爲調試器實現堆棧步行器時我正在努力達到了將參數提取到函數調用並顯示它們的目的。爲了簡單起見,我開始使用純32位(包括調試器和調試器)的cdecl約定和一個帶3個參數的函數。然而,我不明白爲什麼堆棧跟蹤中的參數與cdecl定義的參數(從右到左,沒有任何寄存器)相比沒有規律,儘管現在試圖找出它幾天。 下面是函數調用我試圖堆棧跟蹤的表示: void Function(unsigned long lon

    1熱度

    1回答

    我必須寫在asm函數,以及i在C原型 void fdct(float *in, float *out, unsigned int n); 其中: in:指針輸入數據緩衝器 out:指針outcoming數據緩衝器 n:數據矩陣的數量。 函數不會返回任何內容,但會與輸出數據的數組一起使用,並且必須根據結果進行更改。 據我瞭解,在CDECL棧看起來像: esp: ret esp+4: *in -

    4熱度

    1回答

    在GCC cdecl調用約定中,我可以依賴在調用返回後我推入堆棧的參數是否相同?即使混合使用ASM和C並且啓用了優化(-O2)?

    -1熱度

    1回答

    一個面試問題的cdecl關鍵字出現較強的混亂在我的腦海即讓我們看看這個節目 #include "stdio.h" int main() { static int a=25; void cdecl conv1(); void pascal conv2(); conv1(a); conv2(a); return 0; } void

    1熱度

    1回答

    今天在我的採訪中有一個這樣的問題。 #include <stdio.h> int main(void) { char *s="123456790"; printf("%c,%c",*(char *)((int *)s+++1),*s); return 0; } 我的回答是5,1,但採訪者說是5,2! 當然,我知道C中的默認調用約定是__cdecl,參數傳遞

    0熱度

    1回答

    去這裏:http://cdecl.org/ 輸入: char (*arr)[5] 輸出: 聲明改編爲字符指針 什麼是 「排列5」 的陣列5?這是否僅僅意味着一個包含5個元素的數組?

    3熱度

    2回答

    我正在爲一個項目生成一個用於離線測試的虛擬DLL。我們有真正的DLL和它的頭文件,雖然它們看起來不兼容。在DLL的名稱是未重整但功能的前置聲明聲明被召喚出來爲__stdcall: example.h文件 DWORD __stdcall DoSomething(byte aByte); example.dll中的Dependency Walker: 2 (0x0002) 2 (0x0002) D

    2熱度

    1回答

    我無法找到答案。從我讀過的%ebp有32位,將%esp移動到%ebp,你仍然會有32位,然後減去70到32,我不明白其餘的。我對此很陌生,所以我不是很精通。請給出詳細的解釋。謝謝! 下面是我遇到的問題。 在這個指令序列的末尾,多少個字節將esp和程序堆棧上存儲的返回地址分開?假設我們使用標準的32位x86調用約定來調用這個函數。 804847c functioname: 804847c: pus