問題タブ [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 に答える
171 参照

c++ - jitted 関数で stdout.write を呼び出す YASM アセンブリ

Just-In-Time コンパイラを作成しようとしていますが、動作させたくないコードがあります。私のプラットフォームは x86-64 ubuntu です。

yasm で次のコードを記述しました。

したがって、正しく理解できれば、これはAstdout に書き込まれるはずです。今、私はこのコードをコンパイルします

これにより、次のマシンコードが生成されました。

次に、結果のコードを C++ で読み取り、次のように呼び出します。

C++ の部分は、単純な算術演算で既に試しており、うまく機能したので問題ないと思います。

とにかく、セグメンテーション違反はありません。コードは実行されているようですが、何も起こりません。stdout には何もありません。

何かアドバイス?

//編集:完全な C++ コード:

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

c++ - Cmake:YASM ソース ファイルのビルド

CMake 3.4.1 を使用して、Visual Studio 2013 64 ビット C++ ソリューションを生成およびビルドしています。プロジェクトの 1 つには、VisualStudio で yasm アセンブラーを lib としてコンパイルする .asm ファイルも含まれています。これらのファイルに yasm を使用するように CMake を構成するにはどうすればよいですか?設定方法の例を含むドキュメントは見つかりませんでした。

0 投票する
0 に答える
175 参照

linux - 64 ビット アセンブリ: ld が 64 ビット システム コールではなく 32 ビット システム コールを使用するのはなぜですか?

64 ビット レジスタを使用し、(私が思うに) 適切なコマンドをアセンブルしてリンクしているにもかかわら/usr/include/asm/unistd_32.h、ではなくからのシステムコール番号を使用する必要があるのはなぜだろうと思っています。 unistd_64.h

ファイルhellow.asmは(64.hのものを使用すると機能しないため、32.hのように書き込みに4、終了に1を使用していることを認識しています。書き込みは1であり、 exit 60 を試してみましたが、結果はありませんでした。)

file実行可能ファイルとオブジェクトファイルで次のように返されます。

オブジェクトファイル:ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

実行可能:ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

/usr/include/unistd.hは:

この投稿をここまで読んだなら、私の "hello world" プログラムが代わりに "hey you beauty" と言っている理由がわかるはずです: 私のコンピューターが、バーにいる汚れた老人のように私に話しかけてくるのが好きです。 .

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

linux - 作成したファイル名の末尾にある余分な文字

アセンブラーを学習しようとしていますが、このチュートリアルで問題が発生しています http://www.tutorialspoint.com/assembly_programming/assembly_file_management.htm

ファイルを書き出すときを除いて、うまく機能します。ではなく、myfile.txtという名前になっていmyfile.txtWelcome to Tutorials PointWritten to file?ます。

理由が分からないようです。チュートリアルからソースを削除しましたが、同じことを行います。

誰かが理由を教えてもらえますか?


nasm 2.12.02 を使用しています。yasm 1.2.0 でも試してみたので、アセンブラー コードが原因であると確信しています。

私は構築して実行していますOpenSUSE Linux 3.16.7-35-default #1 SMP Sun Feb 7 17:32:21 UTC 2016 (832c776) x86_64 x86_64 x86_64 GNU/Linux

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

c - コンパイル済みコードを NASM および MSVC とリンクする際の未解決の参照

アセンブリ ( でコンパイル) を/でyasmコンパイルされたオブジェクトと結合しようとしています。これは、最終的な実行可能ファイルにリンクされている に ( で)リンクしようとしています。msvccl.exelink.exe.dll

ソースからオブジェクト ファイルを作成することも、これらのオブジェクトから dll を作成することも、まったく問題なく動作します。

最後のステップで、 を.dll実行可能ファイルにリンクすると、次のエラーが発生します。

私はCを使用しています.Win64には名前マングリングがありませんが、複数のスキーム(_xxx_xxxxまたはなど__imp_xxx_xxxx)を試しました。

オブジェクト ファイルを調べると、dumpbin.exeすべてのシンボルが明らかになります。

しかし、からエクスポートされたシンボルにはありません.dll:

.dllを使用して、宣言を 内でエクスポートされたものとしてマークしましたが__declspec(dllexport)

リンカーを満足させ、シンボルが実際にそこにあることを彼に伝える方法はありますか?

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

assembly - gdb は、.bss 内のシンボルと .data 内のシンボルに対して異なる動作をします

最近、YASM を使用して Intel x86-64 アーキテクチャのアセンブリ言語を学び始めました。本で提案されているタスクの1つを解決しているときに(Ray Seyfarthによる)、次の問題に遭遇しました。

.bss セクションのバッファにいくつかの文字を配置すると、gdb でデバッグ中に空の文字列が表示されます。.data セクションのバッファに文字を配置すると、gdb で期待どおりに表示されます。

gdbで私は得る:

  • LINE 1: の後x/s &buf、結果 -0x7ffff7dd2740 <buf>: ""

  • 行 2 の後: x/s &str_test、結果 -0x601030: "A"

が正しいアドレスに評価されていないように見える&bufため、まだすべてゼロが表示されます。0x7ffff7dd2740 は、その によると、デバッグ中のプロセスの BSS にない/proc/PID/mapsため、意味がありません。 が間違ったアドレスに評価されるのに、正しいアドレスに評価されるのはなぜ&buf&str_testですか? どちらも「グローバル」シンボルではありませんが、デバッグ情報を使用してビルドしました。

x86-64 Ubuntu 15.10 上の GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10 でテスト済み。

で構築しています

nm実行可能ファイルでは、正しいシンボル アドレスが表示されます。

(編集者注:奇妙さはOPのasmではなくgdbの動作にあるため、多くの質問を書き直しました!)。

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

assembly - アドレッシング モードと同じ式でアドレスを計算すると、gdb が BSS 配列の変更を表示しないのはなぜですか?

.bss セグメントに大きなバッファを持つ簡単なプログラムを作成

次に、配列セルの値をインクリメントしようとしました。

gdb では、3 番目の命令の実行前と実行後の両方で同じ値 (0) が表示されます。

保存したアドレスを調べようとすると、まだ 0 が表示されるのはなぜですか?

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

x86-64 - なぜゼロで埋めなかった

10000 ビットに割り当てられた配列 = 1250 バイト (10000/8):

ポインタをテストしました:

メモリが割り当てられました:

その割り当てられたメモリをゼロで埋めようとしました:

チェックされた最初のバイト:

チェックされた最後のバイト (0 - 最初のバイト、1249 - 最後のバイト)

解決した質問 入力する必要がありましたx/1c $rax + 1249