私はnasmのスタックをよりよく理解しようとしているので、nasmの「関数」に「引数」を渡すようにこのプログラムを作成しました。私はこのアセンブリに非常に慣れていません。
section .data
v0s0msg0: db 'Enter something',10
v1t0msg0L: equ $-v0s0msg0
section .bss
v2i0inp0 resb 256
v3v0temp0 resb 256
section .text
global _start
_start:
;This is a nasm program to help me understand the stack better
mov eax,4
mov ebx,1
mov ecx,v0s0msg0
mov edx,v1t0msg0L
int 80h
mov eax,3
mov ebx,0
mov ecx,v2i0inp0
mov edx,256
int 80h
push dword v2i0inp0
call f0m0test0
mov eax,1
mov ebx,0
int 80h
f0m0test0:
pop dword[v3v0temp0]
mov eax,4
mov ebx,1
mov ecx,v3v0temp0
mov edx,256
int 80h
ret 4
アセンブル、リンク、および実行は問題なく実行できますが、実行時に入力を入力すると、2 つの「?」の後にセグメンテーション違反が表示されるだけです。見た目のキャラクター。
変えてみました
pop dword[v3v0temp0]
次のようなものに:
pop v3v0temp0
あるいは:
mov v3v0temp0,dword[ebp]
そのような多くのことですが、それらはすべてセグメンテーション違反、または次のようなアセンブラのエラーとして終了します: オペコードとオペランドの無効な組み合わせ このプログラムを機能させるために助けていただければ幸いです。また、少し説明してください接頭辞「dword」を使用したスタック、および「[]」文字の目的。スタックを「引数」に使用する方法だけを説明してください。これをLinux OS、Ubuntuで実行しています よろしくお願いします