inline-assembly

    1熱度

    1回答

    在一些代碼我在寫,我有以下行: __asm MOV [EBP-24],0 ...從其中所產生的編譯器 MOV BYTE PTR [ ebp-24],0 有沒有什麼辦法可以讓它產生 mov DWORD PTR [ebp-24],0 取而代之?

    1熱度

    1回答

    我只需要了解一條單一指令,因此我需要生成這些東西。 我需要在運行時使用以下彙編代碼傳遞結構(用戶定義的數據類型的對象)。 凡以下是用戶定義的數據類型,即WESContext: typedef struct CWESContext { BSTR UserName; BSTR MachineIP; BSTR Certificate; BSTR Browser

    1熱度

    1回答

    我想將變量「userstack」的值移到ESP寄存器中,然後絕對跳轉到變量「location」中包含的內存地址。 這是我的本錢: // These are the two variables that contains memory addresses uint32_t location = current_running->LOCATION; uint32_t userstack = cur

    33熱度

    2回答

    在我正在進行的GCC內聯彙編實驗中,我遇到了有關標籤和內聯代碼的新問題。 考慮以下簡單的跳轉: __asm__ ( "jmp out;" "out:;" : : ); 這什麼都不做,除了跳轉到out標籤。就這樣,這段代碼編譯得很好。但是如果你把它放在一個函數中,然後用優化標誌進行編譯,編譯器會抱怨:「錯誤:符號'out'已經被定義了。 看上去正在發生的

    15熱度

    1回答

    我很難理解在GCC內聯彙編(x86)中扮演的角色約束。我有read the manual,這正好解釋了每個約束的作用。問題是,即使我理解每個約束所做的事情,但我很少理解爲什麼你會使用一個約束而不是另一個約束,或者可能會產生什麼影響。 我意識到這是一個非常廣泛的話題,所以一個小例子應該有助於縮小焦點。以下是一個簡單的asm例程,它只是增加了兩個數字。如果發生整數溢出,它會將值1寫入輸出C變量。 in

    13熱度

    7回答

    在x86程序集中,當對有符號整數執行add或sub操作時溢出標誌置位,並且對無符號整數的操作溢出時置位進位標誌。 但是,當涉及到inc和dec指令時,情況似乎有所不同。根據這個website,inc指令根本不影響進位標誌。 但是我找不到有關如何影響溢出標誌的任何信息,例如inc和dec。 是否inc或dec當發生整數溢出時設置溢出標誌?這種行爲對於有符號整數和無符號整數都是一樣的嗎? ======

    2熱度

    2回答

    我正在閱讀KVM源代碼並面對x86_64內聯彙編。在下面的代碼中,「%c」的用法是什麼?它是x86_64內聯彙編中的新功能嗎? gcc中的x86_64內聯彙編中的新功能的任何參考? 非常感謝 /* Check if vmlaunch of vmresume is needed */ "cmp $0, %1 \n\t" /* Load guest registers. Don't

    3熱度

    1回答

    由於MSVC10在定位x64體系結構時不允許使用內聯ASM指令,因此我正在尋找解決此類限制的任何方法。我從Google中學到了編寫和編譯單獨的ASM模塊,然後鏈接它們並從C++調用它們的方法,但是我不知道如何做到這一點。除了使用編譯器內部函數之外,還有其他方法嗎?或者,如何在VS2010中針對單獨的ASM模塊編寫/編譯/鏈接?

    5熱度

    4回答

    例子: int main(void) { int x = 10, y; asm ("movl %1, %%eax;" "movl %%eax, %0;" :"=r"(y) /* y is output operand */ :"r"(x) /* x is input operand */ :"%eax"); /* %eax

    4熱度

    4回答

    我想直接在彙編中使用gcc內聯調用MessageBoxA()。不過,我需要通過兩種方式來實現:首先是使用動態尋址,使用LoadLibrary()和GetProcAddress() - 我找到了關於這個的教程,試圖遵循它。但我也有興趣直接調用MessageBoxA的地址,在我的Windows SP3英文中是0x7e4507ea。 我試圖執行此代碼: /* * eax holds return va