アセンブリコードを理解しようとしています。私は、これは私のCコードですx86-64でのポインタ割り当ての理解アセンブリコード
leaq
コマンドの後にポインタが割り当てられている部分と、コード内で立ち往生しています:
#include <stdio.h>
#include<stdlib.h>
int main(){
int x=50;
int *y=&x;
return 0;
}
これが私の、対応するアセンブリコードです:
.file "AssemlyCode.c"
.def __main; .scl 2; .type 32; .endef
.text
.globl main
.def main; .scl 2; .type 32; .endef
.seh_proc main
main:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $48, %rsp
.seh_stackalloc 48
.seh_endprologue
call __main
movl $50, -12(%rbp)
leaq -12(%rbp), %rax
movq %rax, -8(%rbp)
movl $0, %eax
addq $48, %rsp
popq %rbp
ret
.seh_endproc
.ident "GCC: (GNU) 5.4.0"
'int y =&x;'は無効です。 'y'はポインタではありません –
コードを書いている間にルーキーミスをしてしまいました。私は今すぐ修正しました – BrainsOfSteel
簡単に読める例:ローカル関数へのポインタを渡してください。その後、すべてを最適化することなく最適化を有効にすることができます。 [Godboltコンパイラエクスプローラのsource + asmを参照](https://godbolt.org/g/N6ESby)。オブジェクトファイルのメタデータを設定するすべての '.seh_'とその他のディレクティブを取り除きます。 –