gcc中為變數和函式指定彙編時名稱

2021-10-17 03:14:06 字數 812 閱讀 4003

在gcc中可以通過 asm() 或者 __asm__() 為變數和函式指定其在彙編**中的名稱

int foo asm ("myfoo") = 2;

int func (int x, int y) asm ("myfunc");

int func (int x, int y)

如下所示,如果不指定的話,變數 foo 的彙編時名稱是: foo.1724,

$ cat ./main.c

int main(void)

$ gcc -s main.c -o main.s

$ cat main.s

...foo.1724:

.long 5

.ident "gcc: (gnu) 4.8.5 20150623 (red hat 4.8.5-44)"

.section .note.gnu-stack,"",@progbits

...

如下所示,指定之後,變數 foo 的彙編時名稱是:myfoo,

$ cat ./main.c

int main(void)

$ gcc -s main.c -o main.s

$ cat main.s

...myfoo:

.long 5

.ident "gcc: (gnu) 4.8.5 20150623 (red hat 4.8.5-44)"

.section .note.gnu-stack,"",@progbits

...

gcc編譯檔案時找不到指定函式怎麼辦

使用gcc編譯的時候,可能會出現下面的情況 雖然我們在 檔案中新增了一些必要的庫,但是編譯還是提示沒有定義函式。原因是還需要指定函式的具體路徑。首先,要對函式進行查詢。函式的查詢方法如下 在終端輸入命令 nm o lib so grep 函式名 或者 nm o usr lib a grep 函式名 ...

區分彙編中的變數和標號

概括的說 當程式中要跳轉到另一位置時,需要有乙個標識來指示新的位置,這就是標號,通過在目標位址的前面放上乙個標號,可以在指令中使用標號來代替直接使用位址。使用變數是任何程式語言都要遇到的工作。變數是計算機記憶體中已命名的儲存位置,在大部分的語言中都有很多種類的變數,如整數型 浮點型和字串等,不同的變...

static修飾全域性變數 區域性變數和函式時候的區別

static全域性變數與普通的全域性變數有什麼區別?static區域性變數和普通區域性變數有什麼區別?static函式與普通函式有什麼區別?全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方...