0

ここでアセンブリ言語について質問しました。16ビットプログラムは使いづらいと感じました。だから今私はそれを32ビットに変えたいと思っています。これが私が試していた最初のプログラムのコードです:

[org 0x0100]
mov ax, 5
mov bx, 10
add ax, bx
mov bx, 15
add ax, bx 
mov ax, 0x4c00
int 0x21

ex01.asm という名前を付けました。NASM を使用して COM ファイルを作成しました。コマンドは

nasm ex01.asm -o ex01.com -l ex01.lst

しかし、作成した COM ファイルを Ollydbg で使用することはできません。このプログラムを win xp または win 7 で動作するように変更して Ollydbg を使用できるようにするには、どのような変更を行う必要があり、その理由は何ですか? 私の考え :

  1. ORG 0x100 を変更する必要があると思います。それは私が思うCOMファイルに固有のものです。知りたいのですが、ここでどのような変更を加える必要がありますか? COM ファイルは win XP と win 7 で動作しませんか? COM ファイルの代わりに EXE ファイルを作成する必要はありますか? この手順を理解したいだけです。

  2. プログラムが終了したことを DOS に伝えるために使用されるため、最後から 2 番目の行を変更する必要があります。ここでどのような変更を行う必要がありますか?またその理由は?

  3. 最後の行が使用される理由を忘れましたか? 誰かが私に教えてもらえますか?

4

1 に答える 1

1

NASMはEXEを直接生成できないと思います。ASM をオブジェクト ファイルにコンパイルしてから、リンカー (MinGW パッケージの ld.exe など) とリンクする必要があります。

コードでは、インライン コード (WinMain) の代わりにプロシージャを作成する必要があります。

コード:

mov ax, 0x4c00 
int 0x21

プロシージャから戻る (または kernel32.dll から関数を呼び出す) ことで置き換えられます。

これは(少し)役立ちます: http://en.kioskea.net/faq/1559-compiling-an-assembly-program-with-nasm

また、exe を直接ビルドできるFASM http://flatassemblyr.net/を参照することもできます。

于 2011-09-11T13:19:06.993 に答える