プロが教える店舗&オフィスのセキュリティ対策術

ある問題集のアセンブリ解読に関する問題なのですが、何を行っているかを答えるのですが、
いまいちわかりません。アセンブリ言語を読むうえで気を付ける点やアドバイスなどはありますが、答えを教えていただくだけでは力がつかないのでヒントなど出していただけるとありがたいです。

こちらがアセンブリのソースコードです。
.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

A 回答 (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 でサブルーチン名とは全く無関係の処理をしている可能性も否定できません。
    • good
    • 0

○個々の命令は極々単純なものなので、それだけ見ても意味が無い。


固まりで見ること。

○ニーモニックに書いてないことが多い。(フラグの変化等)
データシート等で確認すること

○サブルーチンに値を渡すには、そのサブルーチンがどんな風に値を受けとっているかを確認する。




ただ、このプログラム見たところで「ライブラリのサブルーチンを実行している」だけで、
「putsがどうやって画面に文字を出しているか」なんてレベルのことはまったくわかりませんよ。
    • good
    • 0

まず、サブルーチンL2、L4で何をしているのか考えてみる

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!