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ランキング
-
printf で二進表示を行いたい。
-
10個出力で改行したいのですが...
-
コマンドラインに出力した文字...
-
ブラックジャック
-
C言語で、「自然数nを入力し、n...
-
error C2143: 構文エラー : ';'...
-
scanfに文字が入力されたときに...
-
4の倍数を論理演算で表す。。
-
縦の棒グラフ
-
パスカルの三角形についてのCプ...
-
(C言語)めちゃくちゃな値にな...
-
ピラミッド表示プログラム。
-
C言語 ツェラーの公式を使った...
-
CTRL+Dでループを抜けるには
-
勝率をプログラムに
-
Visual Sutdio 2017 でのC言語...
-
%P と %X の違い
-
printf( " %2d", p * q );
-
C言語 プログラミング ごめんな...
-
printf()文の書式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報