問題タブ [executable-format]
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.
c++ - 結局のところ、変数識別子はまったく必要ないのでしょうか?
私は TOC とコンパイラの設計について十分な時間をかけて勉強しましたが、まだ完了していませんが、概念には満足しています。一方で、私はアセンブリと機械語の知識が非常に浅く、2 つの側面 (コードの HLL と LLL 表現) を結び付けたいという欲求/必要性を常に持っています。パフォーマンスと最適化の議論。
C++ は静的に型付けされた言語です。
私の質問は次のとおりです:コードのステートメントで式として記述された変数は、これらすべての変数 (および識別子を持つ他のエンティティ) が実行時に仮想メモリの位置にアドレス指定する単なる命令になりますか (静的およびグローバルの場合) およびローカル変数のスタックアドレスに関連するアドレス指定?
つまり、セマンティックおよびシンタックスの検証を含むコンパイルが成功した後、実行時にデータをターゲット メモリ バイトの保証されたエンティティとして扱い、識別子やチェックを考えずに、シンボル テーブルが不要になるのは賢明ではないでしょうか?
私の質問が学習努力の不足によるものであると思われる場合 (そうでないことを願っています)、そのことをお知らせください。もしそうなら、正直なところ、私は最近 C++ に集中していて、まだ低レベル言語の十分な知識を得る機会がありませんでした.
exec - ELF ファイルからプロセスを作成するにはどうすればよいですか?
ELF ファイルからプロセスを作成する方法について詳しく説明しているリンクまたは書籍を共有してください。自由に入手できる資料のほとんどは、プログラム ヘッダーからどのような情報が取得され、その情報を使用してプロセス イメージがどのようにメモリ内に存在するかなど、ほとんどの詳細が説明されていないため、抽象的なものに見えます。ありがとう
virtual-memory - otool を使用してバイナリ ファイルのサイズを取得するにはどうすればよいですか?
otool を使用してバイナリに関する情報を取得しています。ここに私の出力の一部があります:
ここで、command 1
でsegname __TEXT
始まることがわかりますvmaddr 0x0000000100000000
問題は、バイナリ サイズが 2.3 MB で、0x0000000100000000 が 4 GB であることです。
アドレスの真ん中の「1」は64ビットアーキテクチャに関係していると思いますが0x0000000100000000
、実際には address 0x00
. 私はそれについていくつかの情報を探していましたが、有用なものは何も見つかりませんでした. 誰かが私の仮定を確認し、これがどのように機能しているかを説明できますか?
linux - 登録されたカスタム実行可能形式は、タイプ `linux_binfmt` のオブジェクトによっても記述されますか?
Linuxカーネルを理解すると
実行形式は、 、、およびの
linux_binfmt
3 つのメソッドを本質的に提供するタイプ のオブジェクトによって記述されます。load_binary
load_shlib
core_dump
と
Linux では、ユーザーは独自のカスタム実行形式を登録できます。新しい形式を登録するには、ユーザーは
/proc/sys/fs/binfmt_misc
次の形式の文字列を binfmt_misc 特殊ファイルシステム (通常は にマウント)の登録ファイルに書き込みます。カーネルは、実行可能ファイルがカスタム形式であると判断すると、適切なインタープリター プログラムを開始します。インタプリタ プログラムはユーザー モードで実行され、そのパラメータとして実行可能ファイルのパス名を受け取り、計算を続行します。例として、Java プログラムを含む実行可能ファイルは、 などの Java 仮想マシンによって処理され
/usr/lib/java/bin/java
ます。
これについては言及していませんが、登録されたカスタム実行可能形式も type のオブジェクトによって記述されていますlinux_binfmt
か?
load_binary
はいの場合、カスタム実行可能形式を登録するために、、、load_shlib
およびcore_dump
メソッドを明示的に提供する必要はありません。3 つのメソッドは、登録から暗黙的に作成されますか?
メソッドなし load_binary
で、対応するインタープリターを介して、登録された実行可能形式の実行可能ファイルを実行するためにカーネルが呼び出すメソッドは何ですか?
windows - ユーザーが Windows オペレーティング システムで実行可能ファイルを実行できないようにする
「XXX」という実行可能ファイルがあり、ユーザーがこの実行可能ファイルを実行できないようにしたいので、このリンクを使用して問題を解決しましたが、問題なく動作しています。
https://www.technipages.com/prevent-users-from-running-certain-programs
しかし、ユーザーが実行可能ファイルの名前を「YYY」に変更すると、ウィンドウでファイルを実行できるようになります。実行可能ファイルの元の完全な名前を使用しようとしていますが、正確な結果が見つかりませんでした。この問題を解決するのを手伝ってください..
windows - 大きな (> 2GB) リソース アセットを実行可能ファイルに追加する
特定の Qt アプリケーション用のシンプルで最小限のカスタム クロスプラットフォーム インストーラーを作成したいと考えています。インストーラーは次のようになります。
しかし、あるユースケースでは、そこに保存するデータの長さが 5GB を超えています。私は次のことを試しました:
Qt インストーラー フレームワークの使用
- オフライン更新を許可しません。
- 上記のようなカスタム Qt Quick Controls 2 UI を作成することはできません (または非常に困難です)。
Qtを静的にコンパイルし、リソースを埋め込む
rcc
- Qt の静的コンパイルに成功
CONFIG += resources_big
in.pro
file を使用して、rcc
ツールの 2 パスで大きなリソースをコンパイルできるようにする- 2GB 未満のファイルでは機能しますが、それより大きいファイルでは機能しません。2GB未満のファイルにこれを使用します
- > 2GB の場合、リンカー (
ld
) は次のエラーで失敗します。...relocation truncated to fit...
- ここで
-mcmodel=medium
提案されているようにフラグを追加しました。機能しない、機能しない、機能しない-mcmodel=large
-Wl,--image-base -Wl,0x100000000
-Wl,--image-base -Wl,0x180000000
Qt を静的にコンパイルし、実行可能ファイルの末尾にデータを追加します (これは、2GB を超えるファイルの場合に最適な方法と思われます)。
- > 5 GB の zip 圧縮されたテスト ファイルを追加します
- バイト単位のサイズで 8 バイトを追加します
- Linuxで動作
- それほど大きなファイルがなくても Windows で動作します (このアプリは PC では実行できません) 。
2GB を超えるファイルには 3 番目のアプローチが最適なように思われるため、3 番目のアプローチを機能させる方法についてアドバイスが必要です。しかし、斬新で斬新なアイデアも大歓迎です。
Qt の不足している機能を修正する代替のクロスプラットフォーム インストーラー フレームワークも歓迎します。
winapi
できれば関わりたくない。ただし、短くて実装が簡単なソリューションも受け入れられます。
ところで、私は現在 4GB の RAM を搭載した PC を持っています。しかし、これは問題ではありませんでした。