私はNASMアセンブリプログラムでstrstr C関数を使用しようとしていますが、正しく印刷されないようです。私はこれを複数試してみましたが、printfや '(null)'に返される空白行を取得すると、Cからポインタ値を返す方法を誤解している可能性があります。私はなぜ私は正しい戻り値を印刷することができないように私を埋めるのを助けることができますか?NASMのstrstr()の戻り値を使用していますか?
section .data
str1 db "Here is some text with a word",0x0A,0x00
str2 db "text",0x0A, 0x00
strFmt db "%s",0x0A,0x00
global _start
extern printf
extern strstr
section .text
_start:
push ebp
mov ebp, esi
push str2
push str1
call strstr
add esp, 8
mov dword [myString], eax
push dword [myString]
push strFmt
call printf
add esp, 8
_exit:
mov ebx, 0
mov eax, 1
int 0x80
これはタイプミスのようです: 'mov ebp、esi'。私はあなたが源泉がそこにあることを意味すると確信しています。また、 'myString'とは何ですか?表示したコードでは、たとえそれを使用していても定義されていません。なぜ、単に「プッシュeax」だけではないのですか? –
私は 'int 0x80'を使用しているので、LinuxまたはmacOSと仮定します。次回は、あなたの質問にこの情報を追加してください。 Windowsでは、状況は少し異なります。 –