プロが教えるわが家の防犯対策術!

(機械語データ) (アセンブリ言語)
b8 57 61 6b 61 mov $0x616b6157,%eax
53 push %ebx
50 push %eax
ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx
cd 80 int $0x80
58 pop %eax
31 c0 xor %eax,%eax
5b pop %ebx
c3 ret
これのintと movとxor の機械語が分かりません。後、retの機械語が、farなのかnearなのかも分かりません。教えていただけないでしょうか?すみません。

質問者からの補足コメント

  • うーん・・・

    ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx で、movと00 00 00とbaとbbがどうなるのかがわかりません。どこに、baとbbの命令が書かれているのでしょうか?教えていただけないでしょうか?すみません。

    No.7の回答に寄せられた補足コメントです。 補足日時:2021/06/16 18:47

A 回答 (8件)

>ここで手詰まりなのですが、以下のURLです。

教えていただけないでしょうか?

何が知りたいのかよくわかりませんが、
補足コメントに書かれていることであれば、
mov $0x4,%edxは人間が分かりやすいように(英語っぽい)記号を用いた表現。
でも、コンピュータは電化製品なので、2進数(電気が流れているかいないか)しか分かりません。したがって、メモリ中には、0と1の情報しかありません。
しかし2進数だと桁数が多くなるので、2進数4桁を1桁にできる16進数を用います。

mov $0x4,%edx に対応する16進数が ba 04 00 00 00 となります。
これが、メモリ中の内容です。コンピュータはこれを読み取り実行します。

ここからは、私の推測です(私はインテル系の機械語には詳しくないのであしからず)
質問者様は ba と 04 と 000000 に分けてみておられますが、
04000000 が 一塊だと思います。これが $0x4に対応しているのでは
おそらく、$0x4 で4バイト の 4 を示すのでは
ちなみにインテル系はリトルエンディアンなので、4バイトの4はメモリ中では逆に並び 04000000 (16進表記)となります。
で、ba は %edxにmov を示しているのでは。

次のmov $0x1,%ebxが bb なのは bbが %ebxにmov をしめしているのだと思いますが。

mov $0x4,%edx は %edxに4バイトの4をいれろ という命令で、
メモリ中には ba 04 00 00 00 と展開される。
コンピュータは ba 04 00 00 00 を解析して %edxに4バイトの4を入れる

こんな感じでは
    • good
    • 0

>その機械語はどうなるのでしょうか?



機械語は通常オペレータ部分(何をするか)とオペランド部分(どこに対してするか)に分かれます。
例えば、電話をするなら、電話をすること自体がオペレータ、電話番号がオペランドです。

その機械語がどうなるのかですが、
オペレータは、機械(CPU)によって異なるので、CPUがわからなければわかりません。
オペランドは、機械によって形式が異なるし、機械がわかっても、操作対象によってことなるのでわかりません。

ただし、質問者様の質問欄に
31 c0 xor %eax,%eax
とあるので、
xor %eax,%eax の 機械語は 16進数で 31c0 でしょうね。
これは、インテル系CPUだと思います。

通常、機械語は人間には分らないので、人間は機械語に対応したコード(この場合は 「xor」 とか 「eax」 とか)を書くことになります。

何の目的で機械語が知りたいのか分かりませんが、
インテル系アセンブラの入門書をお読みになるのが一番かと思います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ここで手詰まりなのですが、以下のURLです。教えていただけないでしょうか?すみません。
https://6900.teacup.com/cgu135/bbs/1096

お礼日時:2021/06/16 17:17

>日本語訳にするにはどうすれば良いのでしょうか?


https://www.deepl.com/translator
    • good
    • 0

xor 排他的論理和(ビットが違っていたら1、同じなら0)


同じもの同士のxor で0クリアできる。
xorに代表される論理演算はコンピュータが最も得意とする演算なので、
0をセットするより速いと思われる
    • good
    • 0
この回答へのお礼

その機械語はどうなるのでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/16 11:04

>すみません。

URL先が見れません。
pdfがダウンロードされるはず。
    • good
    • 0
この回答へのお礼

日本語訳にするにはどうすれば良いのでしょうか?iPadです。

お礼日時:2021/06/16 09:10

>(機械語データ) (アセンブリ言語)


左に書いてあるのがご希望の機械語ですよ。

下記ドキュメントを読めば知りたい命令の機械語が分かります。
https://www.intel.com/content/dam/www/public/us/ …
    • good
    • 0
この回答へのお礼

すみません。URL先が見れません。教えていただけないでしょうか?すみません。

お礼日時:2021/06/16 02:35

1回だけの約束で教える...再度聞いても無視します



>これのintと movとxor の機械語が分かりません。後、retの機械語が、farなのかnearなのかも分かりません。

int:イニシャル...初期化する
mov:Move...移動する
xor:わからんが拡張のORを意味かも
=======================
今判ったが、パソコンの検索欄に int 命令 と入れたら正しいかどうかは別にその命令らしき内容と詳細が出てくる

他の命令もこの例に続けて検索したら君の引き出しが増えるだろう

では、またね~
    • good
    • 0

はあっ?


機械語はコンピュータメーカが作るCPU動作回路を規定するビット列。
標準の機械語なんて物は存在しない。
    • good
    • 0
この回答へのお礼

これのintと movとxor の機械語が分かりません。後、retの機械語が、farなのかnearなのかも分かりません。教えていただけないでしょうか?すみません。
これをどうにか機械語に直す方法が載っている所を知らないでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/15 16:18

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