ページ 1 / 1
課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 17:09
by 丸太郎
gdbで逆アセンブルした結果のコードがあります。
それの結果を知りたいんですが、なかなか命令を読んでいっても途中経過などがわかりません。
課題は
プログラムをgdbで逆アセンブルした結果です。この関数がどのような動作をするか、その途中経過と最終的な結果について解説してください。
コード:
(gdb) disas foo
Dump of assembler code for function foo:
0x0804840c <+0>: push %ebp
0x0804840d <+1>: mov %esp,%ebp
0x0804840f <+3>: sub $0x28,%esp
0x08048412 <+6>: movl $0xaea4a4af,-0x13(%ebp)
0x08048419 <+13>: movl $0xb6b2a6ba,-0xf(%ebp)
0x08048420 <+20>: movw $0xc4,-0xb(%ebp)
0x08048426 <+26>: movb $0x0,-0x9(%ebp)
0x0804842a <+30>: jmp 0x804844b <foo+63>
0x0804842c <+32>: movzbl -0x9(%ebp),%eax
0x08048430 <+36>: movzbl -0x9(%ebp),%edx
0x08048434 <+40>: movzbl -0x13(%ebp,%edx,1),%ecx
0x08048439 <+45>: mov $0xffffffcc,%edx
0x0804843e <+50>: sub -0x9(%ebp),%dl
0x08048441 <+53>: xor %ecx,%edx
0x08048443 <+55>: mov %dl,-0x13(%ebp,%eax,1)
0x08048447 <+59>: addb $0x1,-0x9(%ebp)
0x0804844b <+63>: cmpb $0x9,-0x9(%ebp)
0x0804844f <+67>: jbe 0x804842c <foo+32>
0x08048451 <+69>: lea -0x13(%ebp),%eax
0x08048454 <+72>: mov %eax,(%esp)
0x08048457 <+75>: call 0x80482f0 <puts@plt>
0x0804845c <+80>: leave
0x0804845d <+81>: ret
End of assembler dump.
(gdb)
です。最後になにかがプリントされるとこはわかるんですが、途中経過でなにが起こってるのかがわかりません。よろしくお願いします。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 17:25
by softya(ソフト屋)
すいません。フォーラムルールで禁止している課題の丸投げに該当しますので、出来るだけ自分で解析を試みてください。
http://dixq.net/board/board.html
全部の命令がわかりません! って事はないですよね?
分かる命令は横にコメントと推測を書き入れてください。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 17:36
by softya(ソフト屋)
マルチポストも禁止させて頂いておりますので、相互リンクをお願いします。
「あるプログラムをgdbで逆アセンブルした結果です。この関数がどのような動作をする... - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... 2108143072
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 19:49
by 丸太郎
6~9、11~13行目のmov関数の動きがよくわかりません,の前の部分が,の後ろの部分にコピーされてるのかなとは思うんですが、実際にコピーされてどのようになっているのか具体的にわかりません。
10行目ではjmpで19行目にjmpしてcmpで値をくらベてjbeで条件によって11行目に飛ぶのではないかなとおもっています。
最後のcallで0x80482f0がプリントされるのではないかと思います。
中間部分でどのようになっているかを教えてください。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 20:01
by softya(ソフト屋)
フォーラムルール違反が解消していないので回答は申し訳ないですが、お答え出来ません。
ちなみに、0x80482f0 はcallアドレスなので全く違っています。
前の部分も理解が曖昧すぎるので、ちゃんと一行毎にコメント書いてください。
なにより、相互リンクを一番にお願いします。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 21:20
by 丸太郎
<puts@plt> て書いてあるので printだとおもうんですが.....
相互のやり方わかりませんね
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 21:30
by softya(ソフト屋)
><puts@plt> て書いてあるので printだとおもうんですが.....
putsであることは確かですが、「0x80482f0がプリント」される事はありません。
>相互のやり方わかりませんね
知恵袋から、こちらでも質問していることを分かるように補足などを使ってリンクを張ることです。
目的は、どちらの回答者にも質問しているすべての質問掲示板が分かるようにすることです。
なので、質問している数だけリンクを張る必要がありますので抜けがないようにお願いします。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月01日(土) 23:20
by ISLe
スタックフレームをイメージできないのなら、まずはスタックフレームを図に書き出してみるのが良いと思います。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 00:47
by 丸太郎
putsであることは確かですが、「0x80482f0がプリント」される事はありません
>>そうなんですか。 0x80482f0に書かれてる内容がプリントされるとおもっていました。
スタックフレームをイメージできないのなら、まずはスタックフレームを図に書き出してみるのが良いと思います。
>>そうなんですよね。大体はわかるんですけど、実際に書いてみます。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 00:51
by softya(ソフト屋)
何度もお願いしておりますが、相互リンクをお願いします。
これ以上回答することは、こちらもルール違反と成るため回答を避けざる負えませんのでお願いします。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 00:53
by 丸太郎
いま相互リンクするとあちらで補足質問できなくなるんですけど..
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 01:46
by asd
丸太郎 さんが書きました:いま相互リンクするとあちらで補足質問できなくなるんですけど..
方法はいくらでもあると思いますが。
・向こうに補足でこちらのURLを記述し、向こうは質問を閉じる。
・向こうの質問は(まだ回答がついていないので)削除する。
それでもなお、相互リンクはできないということであれば、
ここでのルールを守ることより、己の利益が大事だと表明したことになりますので、
こちらでの回答は得られないと思ってください。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 04:04
by 丸太郎
asd さんが書きました:丸太郎 さんが書きました:いま相互リンクするとあちらで補足質問できなくなるんですけど..
方法はいくらでもあると思いますが。
・向こうに補足でこちらのURLを記述し、向こうは質問を閉じる。
・向こうの質問は(まだ回答がついていないので)削除する。
それでもなお、相互リンクはできないということであれば、
ここでのルールを守ることより、己の利益が大事だと表明したことになりますので、
こちらでの回答は得られないと思ってください。
しましたよ(`・ω・´)
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 10:41
by softya(ソフト屋)
申し訳ないですが、別IDで書き込んでいるので相互リンクというよりマルチポストの告げ口にしか見えません。
すごく面倒だと思われるでしょうが、リンク意図の説明をお願いします。
※ 掲示板というのはコミニュケーションの一種ですのでお互いに気持よくやり取りしたいと思っております。丸太郎さんもですが私達も気持ちよくやり取りしたいのです。
あと、丸太郎さんが行動しないと先に進まない状況なんですが理解されていますでしょうか。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 15:10
by 丸太郎
相互リンクしておきましたよ//
最終的にどうなるかだけでもわかんないですかね?
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 16:04
by 丸太郎
ISLe さんが書きました:スタックフレームをイメージできないのなら、まずはスタックフレームを図に書き出してみるのが良いと思います。
うえから 3行目までなんですけど、
こんか感じでまず 1行目のpush %ebp で4バイト確保してebpの内容を書き込んで、
2行目でespをebpに書き込む?? ここからよくわかりません。 4バイトのところにespを上書きするのでしょうか???
そして3行目はespから10進数で40ひいていると思うんですが、40ひくというのはどういうことなんしょうか?
できれば図かなにかで表してもらえると助かります
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 16:35
by softya(ソフト屋)
理解が曖昧だと言うことは分かりました。
>4バイトのところにespを上書きするのでしょうか???
それだとスタックメモリ上の操作とレジスタ上の操作がゴッチャゴチャです。
push %ebpでスタックにebpを放り込む=保存します。
mov %esp,%ebpでespの値をebpにコピーします。
さて、ここからがスタックフレームの処理です。
ヒント:
「C言語関数辞典 - C言語用語集 スタックフレーム (stack frame)」
http://www.c-tipsref.com/words/stackframe.html
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 16:57
by ISLe
丸太郎 さんが書きました:そして3行目はespから10進数で40ひいていると思うんですが、40ひくというのはどういうことなんしょうか?
それがスタックフレームを作っているところです。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:13
by 丸太郎
softya(ソフト屋) さんが書きました:理解が曖昧だと言うことは分かりました。
>4バイトのところにespを上書きするのでしょうか???
それだとスタックメモリ上の操作とレジスタ上の操作がゴッチャゴチャです。
push %ebpでスタックにebpを放り込む=保存します。
mov %esp,%ebpでespの値をebpにコピーします。
さて、ここからがスタックフレームの処理です。
ヒント:
「C言語関数辞典 - C言語用語集 スタックフレーム (stack frame)」
http://www.c-tipsref.com/words/stackframe.html
違うメモリーのところなんですね!
まだすこし曖昧ですが、なんとなくわかりました。
曖昧なてんはスタックメモリとレジスタの違いがイマイチてところです(´;ω;`)
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:16
by softya(ソフト屋)
レジスタはCPU内部に存在します。
スタックは外部にあるメモリ上に存在します。
「アセンブラで学ぶコンピュータ基礎のキソ - 第1回「レジスタ」を知るとCPUの細かな処理が見えてくる:ITpro」
http://itpro.nikkeibp.co.jp/article/COL ... 04/267385/
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:17
by 丸太郎
ISLe さんが書きました:丸太郎 さんが書きました:そして3行目はespから10進数で40ひいていると思うんですが、40ひくというのはどういうことなんしょうか?
それがスタックフレームを作っているところです。
なるほど!
push %ebpで4バイトのスタックフレームを保存して???でいいのかな?w
それで3行目でさらに(40ひく=スタックフレーム)をつくるということでしょうか??
40の単位はバイトですか?
バイトなら全部で44バイトということでしょうか?
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:20
by softya(ソフト屋)
丸太郎 さんが書きました:ISLe さんが書きました:丸太郎 さんが書きました:そして3行目はespから10進数で40ひいていると思うんですが、40ひくというのはどういうことなんしょうか?
それがスタックフレームを作っているところです。
なるほど!
push %ebpで4バイトのスタックフレームを保存して???でいいのかな?w
それで3行目でさらに(40ひく=スタックフレーム)をつくるということでしょうか??
40の単位はバイトですか?
バイトなら全部で44バイトということでしょうか?
その答えだと私の書いたリンク先を読んでいないですよね。
あと十進数に直す必要はないです。手間が増えてややこしいだけですよ。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:21
by 丸太郎
1~2行目までは多分わかりました
スタックメモリにebpを4バイト保存して
レジスタ内のespの値をebpにコピー
であっているかな??
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:26
by 丸太郎
その答えだと私の書いたリンク先を読んでいないですよね。
あと十進数に直す必要はないです。手間が増えてややこしいだけですよ。[/quote]
ベースポインタは,現在実行中のスタックフレーム (アクティブなフレーム) の底 (図2の通り正確には底の少し上) を指すレジスタです.以前の BP の値というのは,呼出し側の関数のベースポインタの値で,関数終了時にベースポインタにコピーされます.また,リターンアドレスとは,関数の処理終了後に次に実行するプログラムのアドレスのことです.
よみました...でもいみがわかりませんでした..
ベースポインタは,現在実行中のスタックフレーム (アクティブなフレーム) の底 (図2の通り正確には底の少し上) を指すレジスタです.以前の BP の値というのは,呼出し側の関数のベースポインタの値で,関数終了時にベースポインタにコピーされます.また,リターンアドレスとは,関数の処理終了後に次に実行するプログラムのアドレスのことです.
ここが重要だなとは思うんですが..
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:30
by softya(ソフト屋)
BPって名前から分かりませんかx86CPUだとebpの事です。
リターンアドレスは、call命令の動作を調べてみてください。
>スタックメモリにebpを4バイト保存して
>レジスタ内のespの値をebpにコピー
そうです。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 17:42
by 丸太郎
softya(ソフト屋) さんが書きました:BPって名前から分かりませんかx86CPUだとebpの事です。
リターンアドレスは、call命令の動作を調べてみてください。
>スタックメモリにebpを4バイト保存して
>レジスタ内のespの値をebpにコピー
そうです。
もしかしてはじめの2行は決まり文句的なものですか?
1行目は図のspの部分に4バイト分確保して、そこに図のbpの内容を書き込むてことでしょうか?
2行目は図にあるspの部分を図のbpにコピー
3行目は....
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:01
by softya(ソフト屋)
> もしかしてはじめの2行は決まり文句的なものですか?
スタックフレーム自体が決まり文句みたいなものです。
ただ、スタックフレームというか呼び出し規約には種類があるんですけどね。
「呼出規約 - Wikipedia」
http://ja.wikipedia.org/wiki/%E5%91%BC% ... F%E7%B4%84
今回の場合はstdcallだと思います。 ※違ったら申し訳ない。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:03
by 丸太郎
1~3行目を
もうちょい考えて絵にしてみましたこういうことでしょうか?
3行目はよくわかりませんが書いてみました(´;ω;`)
http://gyazo.com/b19f124a4c13aaaf605a895516541476
(⁰︻⁰) ☝を見てください図です
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:04
by WH
これセキュリティ・キャンプ2013のソフトウェアセキュリティクラスのアセンブリの課題じゃねーか。
こんなとこで聞いて答えを教えてもらおうとしてる時点で参加できる素質無しだな。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:09
by beatle
WH さんが書きました:これセキュリティ・キャンプ2013のソフトウェアセキュリティクラスのアセンブリの課題じゃねーか。
こんなとこで聞いて答えを教えてもらおうとしてる時点で参加できる素質無しだな。
http://www.ipa.go.jp/jinzai/renkei/camp ... amp_SW.txt
これの大問5ですね
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:11
by 丸太郎
WH さんが書きました:これセキュリティ・キャンプ2013のソフトウェアセキュリティクラスのアセンブリの課題じゃねーか。
こんなとこで聞いて答えを教えてもらおうとしてる時点で参加できる素質無しだな。
参加できないですよ 年齢みたしてないので.. ただこういう問題楽しいじゃん! わけわからんけど
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:13
by 丸太郎
WH さんが書きました:これセキュリティ・キャンプ2013のソフトウェアセキュリティクラスのアセンブリの課題じゃねーか。
こんなとこで聞いて答えを教えてもらおうとしてる時点で参加できる素質無しだな。
そもそも年齢見たしてないよ.. でれるなら出たいけど
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:14
by beatle
楽しいですよねー
C言語の深い知識がどのくらいあるか、腕試しにもなりますしね
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:15
by softya(ソフト屋)
あれ? ソフトウェアセキュリティクラスの問い4はこっちの質問のような。
「課題です • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=13163
>参加できないですよ 年齢みたしてないので.. ただこういう問題楽しいじゃん! わけわからんけど
大学の課題じゃないんですか?
楽しいのなら、色んな補足情報も付けちゃいます。
【追記】
あっと図ですが字が読めませんでした。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:21
by 丸太郎
WH さんが書きました:これセキュリティ・キャンプ2013のソフトウェアセキュリティクラスのアセンブリの課題じゃねーか。
こんなとこで聞いて答えを教えてもらおうとしてる時点で参加できる素質無しだな。
参加年齢みたしてたらでたいけどね..
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:24
by 丸太郎
softya(ソフト屋) さんが書きました:あれ? ソフトウェアセキュリティクラスの問い4はこっちの質問のような。
「課題です • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=13163
>参加できないですよ 年齢みたしてないので.. ただこういう問題楽しいじゃん! わけわからんけど
大学の課題じゃないんですか?
楽しいのなら、色んな補足情報も付けちゃいます。
【追記】
あっと図ですが字が読めませんでした。
小学生の汚い字ですいませんwwwwwww
書き直してでなおしてきますorz
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:25
by あたっしゅ
いつぞやの大学入試の英語の問題を Yahoo! で聞いた事件を思いだした。
自分自身は、アレをやった奴を、推薦枠で、合格させるべきだと思ったぞ。
セキュリティ・キャンプってのは、インターネットの質問コーナーで聞いてくる才能も含めての評価じゃないのか ?
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:26
by softya(ソフト屋)
勉強なうさんと丸太郎さんは同一人物ですよね?
名前の統一をおねがいします。 これもフォーラムルールとなっております。
あと課題とのことですが、セキュリティ・キャンプ2013のソフトウェアセキュリティクラスとの関係を説明して頂く必要がありそうです。
そもそも、セキュリティ・キャンプ2013の応募課題との事なので公の場に答えを書いて良いのかが問題となりそうです。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:30
by softya(ソフト屋)
> セキュリティ・キャンプってのは、インターネットの質問コーナーで聞いてくる才能も含めての評価じゃないのか ?
それは泳がさせて、大会側の審査側にバレたら参加不可って事でしょかね。
まぁ検索するキーワードには事欠かなさそうな問題なので直ぐにバレそうです。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:32
by 丸太郎
softya(ソフト屋) さんが書きました:勉強なうさんと丸太郎さんは同一人物ですよね?
名前の統一をおねがいします。 これもフォーラムルールとなっております。
あと課題とのことですが、セキュリティ・キャンプ2013のソフトウェアセキュリティクラスとの関係を説明して頂く必要がありそうです。
そもそも、セキュリティ・キャンプ2013の応募課題との事なので公の場に答えを書いて良いのかが問題となりそうです。
同一人物じゃないです..
あと絵書き直してきました
http://gyazo.com/c9c5a93c8c1584e9634ce1325d670a30
③行目は自身ないんですが
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:37
by softya(ソフト屋)
申し訳ありません。私、副管理人なのです。後はお察しください。
それと関係をお答え頂いておりませんので、お願いします。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:41
by 丸太郎
softya(ソフト屋) さんが書きました:申し訳ありません。私、副管理人なのです。後はお察しください。
すいませんwww
ip抜きかwwwww
まあなんかあれなんで応募終わってからまたすれ立てたほうがいいですね?
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:43
by 丸太郎
softya(ソフト屋) さんが書きました:申し訳ありません。私、副管理人なのです。後はお察しください。
それと関係をお答え頂いておりませんので、お願いします。
関係は5年生の秋にみつけてhpをそれでそのころはhtmlとかcssばっかやってて、それで、まあ中1で出たいなとおもってc勉強はじめて、問題が出されたから練習でといてみようかと...
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 18:48
by softya(ソフト屋)
丸太郎 さんが書きました:softya(ソフト屋) さんが書きました:申し訳ありません。私、副管理人なのです。後はお察しください。
それと関係をお答え頂いておりませんので、お願いします。
関係は5年生の秋にみつけてhpをそれでそのころはhtmlとかcssばっかやってて、それで、まあ中1で出たいなとおもってc勉強はじめて、問題が出されたから練習でといてみようかと...
大会に迷惑を掛けたくないので、そうして頂けると助かります。
他の人も見て応募できるので、大会関係者の手間が増える事を懸念しました。
つまり年齢基準は満たしているんですね。であれば、ちゃんと勉強して出場されたほうが良いです。
今年はまだ出ないと言うことであれば、2013年6月10日(月)17:00(必着)が締め切りなので、までこのまま保留とさせてください。もう一つの質問も同様です。
去年以前の問題であれば、どんどん質問してもらっても問題ありません。
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 19:02
by 丸太郎
softya(ソフト屋) さんが書きました:丸太郎 さんが書きました:softya(ソフト屋) さんが書きました:申し訳ありません。私、副管理人なのです。後はお察しください。
それと関係をお答え頂いておりませんので、お願いします。
関係は5年生の秋にみつけてhpをそれでそのころはhtmlとかcssばっかやってて、それで、まあ中1で出たいなとおもってc勉強はじめて、問題が出されたから練習でといてみようかと...
大会に迷惑を掛けたくないので、そうして頂けると助かります。
他の人も見て応募できるので、大会関係者の手間が増える事を懸念しました。
つまり年齢基準は満たしているんですね。であれば、ちゃんと勉強して出場されたほうが良いです。
今年はまだ出ないと言うことであれば、2013年6月10日(月)17:00(必着)が締め切りなので、までこのまま保留とさせてください。もう一つの質問も同様です。
去年以前の問題であれば、どんどん質問してもらっても問題ありません。
じゃあ去年とかのしつもんさせてもらいます//
Re: 課題( ̄◇ ̄;)
Posted: 2013年6月02日(日) 19:08
by 丸太郎
ありがとうございましたorz