問題タブ [yasm]

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.

0 投票する
1 に答える
3572 参照

assembly - YASM または NASM アセンブリでバックスペースを実行する

raw モードで文字を読み取るプログラムがあります。つまり、入力された文字はバッファリングされるのではなく、すぐに読み取られます。

バックスペースを実行する方法を知りたいです。つまり、Backspace キーを押すと、左側の文字が削除され、カーソルが 1 つ左に移動します。

バックスペース文字に続いてスペース文字を出力しようとしました。これにより、左側の文字が削除されますが、何らかの理由でカーソルが2スペース右に移動します。

また、バックスペース文字を単独で出力しようとしました。これにより、カーソルが 1 スペース左に移動しますが、文字は削除されません。

私のアセンブラは YASM で、64 ビット Linux を使用しています。以下は関連するコードです。

まず、文字を出力するために使用する関数は次のとおりです。

次のコードは、Backspace を出力します。通常の Backspace のように、カーソルを 1 か所左に移動しません。

このコードは、Backspace の後に Space を出力します。カーソルを 1 つではなく 2 つ右に移動します。

Len は、バックスペース、スペース、バックスペースの順に印刷することを提案しました。これはうまくいくようです:

前に述べたように、私は raw モードで文字を読んでいることに注意してください。前もって感謝します!

0 投票する
2 に答える
19808 参照

assembly - 2rd、oword、yword オペランドのサイズは?

NASM / YASM マニュアルtwordで使用されている、owordおよびywordオペランドのサイズは? それに関連して、これらの名前にはトリックや根底にあるアイデアはありますか? より大きなワードサイズに論理名を付ける方法はありますか?

ワード サイズはシステム間で異なる場合がありますが、NASMwordは 2 バイトで、dwordその 2 倍 (4 バイト) でqword、クワッド ワード (8 バイト) ですが、...twordトリプルワード(6 バイト) ですか? そしてowordyword私はもっともらしい意味さえ考えられません。

おそらく簡単な質問ですが、答えが見つかりませんでした。NASM および YASM のマニュアルでは、これらのサイズは説明されておらず、 、 、 、 、疑似命令でも説明さDQDTDYRESQませRESTRESY。MASMが同様のシステムを使用していることをどこかで読みましたが、それについても何も見つかりませんでした.


編集:回答に基づいて、これは完全なリストです:

  • 1 バイト (8 ビット): byteDBRESB
  • 2 バイト (16 ビット): wordDWRESW
  • 4 バイト (32 ビット): dwordDDRESD
  • 8 バイト (64 ビット): qwordDQRESQ
  • 10 バイト (80 ビット): twordDTREST
  • 16 バイト (128ビット) : oword、、、、DORESODDQRESDQ
  • 32 バイト (256 ビット): ywordDYRESY
  • 64 バイト (512 ビット): zwordDZRESZ
0 投票する
3 に答える
1796 参照

linux - Linux 64 ビット Intel (x86-64) アセンブリで、バッファーに収まらない stdin 入力がシェルに送信されるのを回避する方法

編集: @Gunnerがこれはバッファオーバーフローではないことを指摘したため、タイトルが変更されました。

stdinLinux 64 ビット Intel アセンブリからユーザー入力を読み取るNR_read際に、入力バッファーに収まらない入力が Linux シェルに送信されるのをどのように回避できるのでしょうか。バッシュ?たとえば、このサンプル プログラムでは、255 バイトの入力バッファーを定義しました (バッファーのサイズは >= 1 であれば何でもかまいません)。残りの 255 バイトを超える入力は bash に送信され (bash から実行している場合)、これは明らかに重大な脆弱性です。この脆弱性を回避するには、Linux 64 ビット アセンブリで入力をどのように読み取る必要がありますか?

これが私のコードです:

0 投票する
3 に答える
4484 参照

assembly - YASM/NASM Hello World のビルドで問題が発生しました

hello.asmを Windows 実行可能ファイルにビルドしようとしていますが、推奨されるコマンドを使用してコードをアセンブル、リンク、およびコンパイルすると、エラーが発生します。Strawberry Perlの GCCを使用しているかMinGWの GCC を使用しているかにかかわらず、どちらも同じ YASM/NASM コードに対してエラーを返します。

ここに痕跡があります。Makefile または .ASM で何か間違ったことを行っているか、リンク プロセスにバグがあります。いずれにせよ、誰かにエラーの解決を手伝ってもらいたいです。

nasm と yasm のどちらを使用してオブジェクト ファイルをアセンブルしても、同じ結果が得られます。

ストロベリー Perl GCC トレース:

MinGW GCC トレース:

仕様:

  • YASM 1.2.0
  • NASM 2.10.05
  • ストロベリーパール gcc 4.4.3
  • MinGW gcc 4.5.2
  • ストロベリーパール5.12
  • MinGW 0.1
  • Windows 7 プロフェッショナル x64
  • MacBook Pro 2009
0 投票する
2 に答える
3814 参照

macos - MacOSMountainLionのyasmを使用したシンプルなasmプログラム

非常に単純なプログラムを64ビットでコンパイルして実行したいと思います。

それをコンパイルする行:

また、別の形式で試しましたが、macho[|32|64], elf[|32] binどれも成功しませんでした。

それをリンクする行:

gccまた、などのいくつかのオプションを試してみました-m64 -arch x86_64

0 投票する
2 に答える
2132 参照

makefile - Makefile エラー - make: *** `all' が必要とするターゲット `boot.o' を作成するルールがありません。止まる

私は unix のようなカーネル開発チュートリアルに取り組んでいますが、完全な初心者の問題に遭遇したと確信しています。これの何が問題なのか誰か教えてもらえますか?

前もって感謝します

0 投票する
1 に答える
2203 参照

assembly - Intel構文で64ビットコードをコンパイルするYasm

私はこのファイルを持っています:

これは、次のディレクティブを使用して yasm で適切にコンパイルされます。

私の質問は: intel 構文を使用して nasm パーサーを使用して 64 ビット コードをコンパイルする方法はありますか? AT&T 構文があまり好きではない

0 投票する
1 に答える
1310 参照

macos - Mac OS X:YASM:エラー:マッチョ:申し訳ありませんが、64モードでは32ビットの絶対再配置を適用できません

NASMは問題なくコンパイルされますが、YASMを使用すると、次のエラーが発生します。

hello.asm:12:エラー:マッチョ:申し訳ありませんが、64ビットモードでは32ビットの絶対再配置を適用できません。memアクセスには「[_symbolwrt rip]」、ポインタには「qword」と「dq_foo」を検討してください。

Makefile

system.inc

hello.asm

誰が何が起こっているのか知っていますか?そして、NASMが機能する理由を説明できても、YASMが機能しない場合は、それはボーナスになります。

0 投票する
2 に答える
313 参照

x86 - x86: メモリ アドレスに移動するときにキャリー フラグが設定されないのはなぜですか?

これはダップのように見えるかもしれませんが、私の質問のようなものは見つかりませんでした. 私がyasmに持っているとしましょう:

に移動するときにキャリーフラグが設定されないのはなぜですか? バイトだけです!私が明らかにそれに移動したとき、バイトよりもはるかに大きくなります。実際、gdb では、数値全体が a に格納されます。その宣言を考えると、それはどのように可能ですか?

0 投票する
1 に答える
290 参照

assembly - VSYASMでのwin64アンワインドデータディレクティブの使用

コードはすべて正常に機能しましたが、巻き戻しデータを作成するためのディレクティブを追加すると、YASMはコードのアセンブルを拒否し始めました。

自動生成されたコマンドラインの「-fx64」で証明されているように、ビルド設定はx64用です。"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\"vsyasm.exe -Xvc -f x64 -o "x64\Debug\\" -l "" -P "" --mapdir= "" -E "" --prefix "" --suffix "" -rnasm -pnasm -m amd64

通常、-mスイッチはそこにありませんが、私はそれを適切に追加しました。それは役に立ちませんでした。

-fスイッチの引数をに変更しても、次のwin64いずれにも役立ちません。"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\"vsyasm.exe -Xvc -f win64 -o "x64\Debug\\" -l "" -P "" --mapdir= "" -E "" --prefix "" --suffix "" -rnasm -pnasm -m amd64

このコードでは、

proc_frameVSYASMは、関数ラベルの再定義について不平を言います。これは、おそらく、ディレクティブとして認識されなかったことを意味します。それはまた言いますerror: unrecognized directive 'alloc_stack'そして同じですsave_xmm128。について文句はありませんendprolog

角かっこで囲むproc_frameと最初のエラーはなくなりますが(ラベルの再定義)、マニュアルには角かっこなしで使用するように記載されており、とにかく問題は解決しません。

これを修正するにはどうすればよいですか?できれば、適切な巻き戻しデータを作成する方法で。