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

アセンブリ命令にjmpがありますが、
ある関数の場所にjmpしたい場合、アドレスなどは必要なのでしょうか?
また、jmp命令とアドレスを駆使して呼び出したい関数の場所まで行けるのでしょうmovl $WRITE, %eax # write
int $0x80
incl %ecx # 次の文字
jmp write

あるいは、コンパイラが勝手に関数の場所までjmpしてくれるのでしょうか?

詳しくお聞きしたいです。
どうかよろしくお願いします。

A 回答 (1件)

jmp命令には当然、飛び先のアドレスが必要です。

アセンブルコードを直接手書きしてるんだったらユーザー自身がアドレスを書かないといけませんが、普通にMASMなりのアセンブラを使っていれば、飛び先に付けたラベルで指定できます。

またjmpの場合は飛び先アドレスを直接書く方法(絶対アドレス指定)と、ここからxxバイト先に飛べという指定(相対アドレス指定)の2通りがあります。

それはまあいいんですけど、何も考えずに関数にjmpでいきなり飛ぶのはやっちゃいけない行為です。それをやると多分暴走しますね。なぜそうなるかの理由がわからなければ、アセンブラを基礎から勉強する必要があります。それと同時に、PC自体の構造(メモリ空間内のどこに何があるか)を知ることも必要です。じゃないとアセンブラは扱えませんから。

まず一度がっつり、参考書みたいに系統立ててまとまった資料で勉強するのが先決じゃないですかね。その上でわかんないことをここで聞くような感じで。最初から最後まで全部ここで済ませるのって無理ですよ。
    • good
    • 0

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