簡體   English   中英

將AT&T語法轉換為Intel語法(ASM)

[英]Convert AT&T syntax to Intel Syntax (ASM)

我一直在嘗試訪問可執行文件的peb信息,如下所示: Access x64 TEB C ++&Assembly

該代碼出於某些奇怪的原因僅在AT&T語法中起作用,但是當我嘗試使用Intel語法時,它無法給出相同的值。 我當然有一個錯誤。 所以我在問..

如何轉換:

int main()
{
    void* ptr = 0; //0x7fff5c4ff3c0
    asm volatile
    (
        "movq %%gs:0x30, %%rax\n\t"
        "movq 0x60(%%rax), %%rax\n\t"
        "movq 0x18(%%rax), %%rax\n\t"
        "movq %%rax, %0\n"
        : "=r" (ptr) ::
    );
}

英特爾語法?

我試過了:

asm volatile
(
    "movq rax, gs:[0x30]\n\t"
    "movq rax, [rax + 0x60]\n\t"
    "movq rax, [rax + 0x18]\n\t"
    "movq rax, %0\n"
    : "=r" (ptr) ::
);

和:

asm volatile
(
    "mov rax, QWORD PTR gs:[0x30]\n\t"
    "mov rax, QWORD PTR [rax + 0x60]\n\t"
    "mov rax, QWORD PTR [rax + 0x18]\n\t"
    "movq rax, %0\n"                     //mov rax, QWORD PTR [%0]\n
    : "=r" (ptr) ::
);

它們不會輸出與AT&T語法相同的值: 0x7fff5c4ff3c0

有任何想法嗎?

您忘記了倒數第二行的操作數順序。 也就是說,由於gs段的覆蓋,您在asm中唯一需要的指令是第一條指令,其余指令可以在C語言中完成。

暫無
暫無

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

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