50歳からアセンブラプログラムを趣味で勉強しております。
一つ壁に当たりました。
コマンドライン引数が何処にあるのかわかりません。
Windows7で
nasm -fwin32 test.asm
alink -oPE -subsys console test.obj crtdll.lib -entry start
アセンブル、リンクしています。
test.asm
extern printf
section .text
global _start
_start: push ebp
mov ebp,esp
mov eax,[ebp+8]
push eax
mov eax,A101
push eax
call printf
add esp,8
pop ebp
ret
section .data
A101: db 'argc = %d', 10, 0
で、argc = 2147340288 と表示されます。
どうぞよろしくお願いいたします。
No.4
- 回答日時:
あと、printf への引数の渡し方が逆のようです。
以下のようにすると、A101が生きるようです。
_start:
push ebp
mov eax,A101
push eax
call GetCommandLineA
push eax
call printf
add esp,8
pop ebp
ret
section .data
A101: db 'argc = %d', 10, 0
No.3
- 回答日時:
#2の方の方法でよいようです。
ただし、printfの設定方法が分からないので、そのままの表示
にしました。
なお、リンカのコマンドラインは「 -entry _start」でした。
extern GetCommandLineA
extern printf
section .text
global _start
_start:
push ebp
call GetCommandLineA
push eax
call printf
add esp,4
pop ebp
ret
section .data
No.1
- 回答日時:
_start: push ebpがありますからスタックは
ebp ←esp
return address
argc
argv[0]
argv[1]
になりますからargcは[ebp+8]ではなく[ebp+16]
では?
考えていただいてありがとうございます。
早速、[ebp+16]で試してみましたが argc = 2005415915 という結果でした。
4byteじゃないのかな?と思い 2byte 1byte で試してみましたが思うような結果が得られませんでした。
後、セグメントレジスタも調べてみましたが、今のままで問題ないようです。
恐縮です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
strcmp
-
printf で二進表示を行いたい。
-
改行について 1行に何個かづ...
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
C言語プログラミング
-
CTRL+Dでループを抜けるには
-
二つの整数値の大小比較
-
%P と %X の違い
-
scanfに文字が入力されたときに...
-
コマンドプロンプトがすぐ消える
-
C言語で、 printf()とwhile文を...
-
C言語
-
BMI値から体型を判定するプログ...
-
分数を表示するプログラム(長...
-
C言語で入力した変数の値から三...
-
ガウスの消去法、後退代入について
-
4の倍数を論理演算で表す。。
-
C言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報