calling-convention

    2熱度

    1回答

    是否可以修改編譯器的調用約定,使生成的代碼不使用特定的CPU寄存器?我會對最近版本的gcc和msvc的解決方案感興趣。 更新:-ffixed-reg和/或Explicit-Reg-Vars似乎爲gcc做了訣竅。謝謝您的回答。是否有類似的MSVC機制?

    0熱度

    1回答

    所以我必須爲學校做這個項目,包括讀brainfuck中的文件並將其解釋爲程序集。如果我將文件路徑保存爲.data節中的字符串,但代碼工作正常,但是我想擁有它,因此它在終端中啓動代碼時將文件路徑作爲參數。 我試過彈出3次(因爲堆棧應該是程序/第一個參數的args /地址的數量),然後將%rdi設置爲第三個彈出項的地址值,但它返回「。 /解釋器」,而不是文件路徑 這是工作的代碼: .data fil

    0熱度

    2回答

    在下面的代碼中有一個調用約定錯誤(可能導致一個永恆循環),並且我無法檢測到它。我嘗試使用'Satabs'驗證代碼。什麼樣的模型可以將誤差帶到表面。通過以下模型,我可以得到一個段錯誤。 通過更改VLEN和TMAX,您可以播放一下。 Q1。什麼是調用約定錯誤?第二季度銷售價格爲 。哪種模型最適合用來查找錯誤? #include <stdio.h> #if MODEL==1 #define VL

    2熱度

    2回答

    我是AT & T彙編的新手,我正在學習使用遞減運算符decl創建一個打印Hello world! 5次的程序。 下面的代碼: .data hello: .ascii "Hello world!" .text loop: decl %eax leaq hello(%rip), %rdi call _puts jnz loop

    0熱度

    1回答

    是否沒有能力爲ARMv8提供64位堆棧?我知道AArch64上沒有push和pop指令,所以堆棧管理留給AArch32來傳遞參數等等。我們怎樣才能通過48位地址?我在使用AArch64時總體上很困惑函數調用是如何工作的。

    0熱度

    1回答

    我花了很多時間試圖解決這個問題,我不明白,爲什麼它不工作。問題的描述是在下面的評論: .386 .MODEL FLAT, STDCALL OPTION CASEMAP:NONE .NOLIST .NOCREF INCLUDE \masm32\include\windows.inc .LIST .CODE DllEntry PROC hInstDLL:HINSTANCE, rea

    -1熱度

    1回答

    我在C++中創建了一個DLL,並在C#中用[DllImport]加載。 在不調用約定的情況下導出時,C++中是否使用了__cdecl默認值? 可以使用CallingConvention.StdCall或CallingConvention.Winapi函數__cdecl嗎? (它的工作在我的測試,我不使用「變量參數」),而不調用約定導出時

    1熱度

    1回答

    我創建了一個DLL文件,其中包括兩個空函數。 extern "C" __declspec(dllexport) void __stdcall myFunc1() { // just empty function } extern "C" __declspec(dllexport) void __cdecl myFunc2() { // just empty functio

    1熱度

    1回答

    在下面,我試圖讓用戶選擇並用它來調用其他函數。我將選擇推入堆棧,然後按格式化行,然後調用scanf,但我似乎無法使用輸入的內容。 ;nasm -f elf64 fib.asm -o fib.o ;gcc -S -masm=intel fib.c -o fib.s ;./fib bits 64 global main extern puts extern

    0熱度

    2回答

    所以我正在試驗如何從ASM調用C++程序。它在調試模式下工作,但不是在發佈模式下工作。 我的彙編代碼,看起來像這樣: sub rsp, 30h mov rcx, 1 mov rdx, 2 mov r8, 3 mov r9, 4 mov qword ptr [rsp + 20h], 5 mov qword ptr [rsp + 28h], 6 call MyProc add rsp,