簡體   English   中英

C和程序集__asm不起作用

[英]C and assembly __asm doesn't work

我發現這段代碼將堆棧指針放入EAX寄存器(它應該是C中“return”使用的寄存器)

#include <stdio.h>
unsigned long get_sp(){
    unsigned long stp;
    __asm{
        mov
        eax, esp
        }
}

void main(void){
printf("\n0x%x", get_sp());
}

我和Geany一起試過但它不起作用!! 然后我按照編譯器日志,我以這種方式更改了代碼:

#include <stdio.h>

unsigned long get_sp(void);

int main(void){
printf("\n0x%ld", get_sp());
return 0;
}


unsigned long get_sp(void){
    unsigned long stp;
    __asm{
        mov eax, esp
    }
}

這次我主要沒有問題但其他功能是悲劇! 它無法識別__asm。 未知類型名稱'mov'....未使用的變量'eax'...似乎它想要__asm()而不是__asm {},就像函數的正常調用一樣。 有人可以幫幫我嗎? PS我有debian 64 ....它可能有64架構的問題?

正確的GCC代碼將是

__attribute__((noinline,noclone))
unsigned long get_sp(void) {
  unsigned long stp;
  asm(
    // For x86_64: "movq %%rsp, %0"
    "movl %%esp, %0"
    : "=r"(stp)
  );
  return stp;
}

暫無
暫無

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

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