cdecl

    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 -

    -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

    0熱度

    3回答

    只是很快,爲什麼沒有配套指令要離開x86?這樣一來, pushl %ebp movl %esp,%ebp pushl $3 leave ret 將變成: enter #or something pushl $3 leave ret 是不是隻是快於一般?

    0熱度

    1回答

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

    1熱度

    1回答

    說我有void f(int a, int b, int c) { g(a, b, c); h(a, b, c); }在x86彙編這樣的: section .text f: pop dword [res_1] call g ; g(a, b, c) call h ; h(a, b, c) push dword [res_1] ret se

    4熱度

    3回答

    我需要編寫調用外部函數的代碼,該函數可以是32位Windows應用程序中的stdcall call或cdecl。 我的代碼,調用者,無法預先知道其中的哪一個。 現在,如果我嘗試從被定義爲stdcall的調用站點調用cdecl函數,那麼我會得到一個checkEsp異常對話框,並且我猜測這是出於很好的原因。 有什麼辦法可以做到嗎?

    2熱度

    1回答

    例如 int foo(short x); short s = -1; foo(s); 是不是一樣 //int foo(short x); //Updated int foo(signed x); short s = -1; foo((signed)s);//sign-extend and push to stack 抑或是一樣 //int foo(short x); //Upda

    2熱度

    1回答

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