ある問題集のアセンブリ解読に関する問題なのですが、何を行っているかを答えるのですが、
いまいちわかりません。アセンブリ言語を読むうえで気を付ける点やアドバイスなどはありますが、答えを教えていただくだけでは力がつかないのでヒントなど出していただけるとありがたいです。
こちらがアセンブリのソースコードです。
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "w\0"
LC1:
.ascii "test.dat\0"
.align 4
LC2:
.ascii "\343\203\225\343\202\241\343\202\244\343\203\253\343\202\252\343\203\274\343\203\227\343\203\263\345\244\261\346\225\227\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
LFB10:
.cfi_startproc
pushl %ebp #
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp #,
.cfi_def_cfa_register 5
andl $-16, %esp #,
subl $288, %esp #,
call ___main #
movl $LC0, 4(%esp) #,
movl $LC1, (%esp) #,
call _fopen #
movl %eax, 284(%esp) # tmp89, fp
cmpl $0, 284(%esp) #, fp
jne L2 #,
movl $LC2, (%esp) #,
call _puts #
movl $-1, %eax #, _1
jmp L4 #
L2:
movl 284(%esp), %eax # fp, tmp90
movl %eax, (%esp) # tmp90,
call _fclose #
movl $0, %eax #, _1
L4:
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
No.3ベストアンサー
- 回答日時:
ざっと見た感じでは、順調にいって
call ___main #
call _fopen #
call _puts #
call _fclose #
の4つのサブルーチンを呼ぶプログラムです。
これらはC言語のプログラムのコンパイル結果のような感じで、関数名から推測するに、
プログラム起動時のパラメタの処理を call ___main で行い、
fopen("test.dat”、”w”) でファイルを開いて、
正常に開けた場合に、
LC2:
.ascii "\343\203\225\343\202\241\343\202\244\343\203\253\343\202\252\343\203\274\343\203\227\343\203\263\345\244\261\346\225\227\0"
の文字列を puts() で書き
正常に開けなかった場合には、call _fcloseでファイルを閉じる
というプログラムのようです。
詳細は、サブルーチンの本体のプログラムを読まないとわかりません。極端な話、サブルーチン_fopen でサブルーチン名とは全く無関係の処理をしている可能性も否定できません。
No.2
- 回答日時:
○個々の命令は極々単純なものなので、それだけ見ても意味が無い。
固まりで見ること。
○ニーモニックに書いてないことが多い。(フラグの変化等)
データシート等で確認すること
○サブルーチンに値を渡すには、そのサブルーチンがどんな風に値を受けとっているかを確認する。
ただ、このプログラム見たところで「ライブラリのサブルーチンを実行している」だけで、
「putsがどうやって画面に文字を出しているか」なんてレベルのことはまったくわかりませんよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- その他(プログラミング・Web制作) x86_32ビットアセンブラ 2 2023/06/28 17:50
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoのジャイロモジュールMP...
-
C言語をコンパイルするとコンピ...
-
mallocについて
-
gccを行ってもexeファイルが生...
-
c言語
-
C言語 列挙型(enum型)変数について
-
卒業研究でよく分からないとこ...
-
C言語初心者 構造体 課題について
-
C++でデスクトップGUIアプリ開...
-
C言語初心者 構造体 課題について
-
win10で、正確な待ち時間の作り方
-
[C言語]fputsとfprintfの違い
-
VisualStudio2022でC言語プログ...
-
大量のデータを読み込んで表示...
-
C言語初心者 ポインタについて...
-
あなたは、Excelはどうやって学...
-
C言語初心者です、、、お助けく...
-
システムエンジニアの適正について
-
Stuck
-
Notepad++の関数リスト表示の変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
あなたは、Excelはどうやって学...
-
WindowsのCapsLock(キャップス...
-
質問失礼します。 プログラム言...
-
double型が正常に認識されてい...
-
Notepad++の関数リスト表示でC...
-
どちのほうがすきですか?
-
Stuck
-
Notepad++の関数リスト表示の変...
-
ArduinoでMouse関数を使用して...
-
C言語の関数と配列に関する質問
-
C言語って古いですか?
-
Linuxでの開発環境構築や設定の...
-
Bitcoin、BTCはブロックチェー...
-
C++6.0でのresource.hについて
-
MACで動く実行ファイルをWindow...
-
C言語 列挙型(enum型)変数について
-
c言語
-
大量のデータを読み込んで表示...
-
こんなことてしますか??
おすすめ情報