問題タブ [nasm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - アセンブルされたプログラムをデバッグする方法は?
セグメンテーション違反でクラッシュするアセンブリで記述されたプログラムがあります。(コードは関係ありませんが、ここにあります。)
私の質問は、GDBを使用してアセンブリ言語プログラムをデバッグする方法です。
GDBで実行してバックトレースを実行しようとすると、意味のある情報が得られません。(16進オフセットのみ。)
プログラムをデバッグするにはどうすればよいですか?
(ちなみに、私はUbuntuでNASMを使用していますが、それが何らかの形で役立つ場合は。)
linux - x86アセンブリでfgetsを呼び出す方法は?
のドキュメントにfgets()
よると、関数は次の3つのパラメータを取ります。
- char* -入力を保持する文字列
- int-読み取る最大文字数を表す整数
- FILE* -
FILE *
読み取り元のストリームへ
関数を呼び出すのに問題はありません。push
スタックに3つのパラメーターを追加し、関数を呼び出して、12ずつ増やしますESP
。
私の問題はパラメータ#3にあります。FILE *
標準入力の場合、何を渡す必要がありますか?Cでは、を使用できますstdin
が、x86アセンブリで同等のものが何であるかわかりません。
更新: LinuxでNASMを使用しています。
assembly - doubleが提供されているのにscanfが0.000000を返すのはなぜですか?
私は次のアセンブリコードを持っています(Linux上のNASM用に書かれています):
プログラムをアセンブルして実行すると、期待どおりにプロンプトが表示されます。ただし、入力した数値に関係なく、出力は常に0.000000
です。
私は何が間違っているのですか?
assembly - アセンブリを使用した16進数の印刷
NASMアセンブリを学ぼうとしていますが、高水準言語のように見えるものに苦労しているようです。
私が使用しているすべての教科書は、文字列の使用について説明しています。実際、それは彼らのお気に入りの1つであるようです。hello worldの印刷、大文字から小文字への変更など。
ただし、NASMアセンブリで16進数をインクリメントおよび印刷する方法を理解しようとしていますが、続行する方法がわかりません。たとえば、16進数で#1-nを出力したい場合、Cライブラリ(私が使用できるすべての参照)を使用せずにどのように印刷しますか?
私の主なアイデアは、.dataセクションに変数を設定し、それをインクリメントし続けることです。しかし、この場所から16進値を抽出するにはどうすればよいですか?最初に文字列に変換する必要があるようです...?
アドバイスやサンプルコードをいただければ幸いです。
assembly - アセンブリのメモリ破損?
現在、Linux の hexdump システム関数をモデルにしたアセンブリ プログラムがあります。基本的に、現在の行番号を出力し、バイナリ値を 16 進文字列に変換し、16 進文字列に関連付けられている現在の ASCII も表示します。
行番号を印刷するシステムで問題が発生しています。この関数は、コードの他の部分がコメント アウトされている場合にのみ機能します。コメント アウトされていない場合、正しくない結果が生成されます。ただし、使用されているレジスタがクリアされるため、コードの 2 つの部分が互いに影響を与える理由がわかりません。
PrintLineNum 関数が機能すると、現在の行番号が行の左側に出力されます。
ただし、16 進文字列を出力する機能を再度有効にすると、「スキップ」が開始されます。
16 進数の文字列を出力すると行数に影響する理由はわかりません。2 つの操作は、私が知る限り独立しています。アドバイス、提案、または改善があれば役立ちます。このコードの一部は Duntemann の「Assembly Language - Step by Step」からのものであることに注意してください。行番号と ASCII プリントアウトを追加しました。以下のコードの問題のあるセクションにマークを付けました。
ご協力ありがとうございます。
linux - ubuntu でアセンブリ コードを実行する
私が実行しようとしているコードは次のとおりです。nasm util を使用してオブジェクト ファイルに変換します。実行しようとすると、「バイナリファイルを実行できません」と表示されます。
次のコマンドを実行します: nasm -f elf -o helloworld.o helloworld.asm
これはアセンブリでの私の最初のプログラムであり、いくつかの
基本的な c プログラムをコンパイルする以外は ubuntu を使用しませんでした。私は助けが必要です。
assembly - Nasm、前景色と背景色を切り替えるブートローダー
仮想マシンなどの nasm を使用してブートローダーを作成している人がいます。とにかく、vramを使用して、キーs、d、f、gによってトリガーされる背景とフォントの色の変更を表示します。Sは背景色でフォントの色を切り替えます。これを行う方法は知っていますが、適切な方法がわかりません。vram は、2 バイトが最初の文字、2 番目がその属性になるように設定されています。これらは背景の次に文字の色です。だから私はこれらを取り、それらを切り替える必要があります。これにより、フォントの色と背景の色が切り替わります。コードで実際にどのように行うのですか?
2 番目の質問: このループを使用してキーを検出します。これらのキーを Ctrl + キーに変更するにはどうすればよいですか。
ありがとうございました。
assembly - nasm 乱数ジェネレーター関数
nasm で記述された乱数ジェネレーター関数が必要です。質問して申し訳ありませんが、見つかりませんでした。
assembly - asmでパラメータを渡すときの文字列の長さはどれくらいですか?
acファイルからasmファイルに2つの文字列をパラメータとして渡します。次に、これらをスタックからecxとedxに移動します。どうすればそれらの長さを正確に知ることができますか?cのstrlen(string)のように?
operators - NASMのMULオペレーターとIMULオペレーター
MUL演算子が単一のオペランド形式しかない理由はありますか?
IMUL演算子は、3つの異なる形式(1つ、2つ、または3つのオペランド)にすることができ、これははるかに便利です。技術的な観点から、MUL演算子が2つまたは3つのオペランド形式にできない理由はわかりません。