問題タブ [userland]
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.
linux - Linux userland exec
execve()システムコールを呼び出さずに、静的にリンクされたバイナリをexec()できるCライブラリが必要です。システムコールが機能しない理由は、バイナリファイルが実行可能ではなく、そのシステムで実行可能にすることができないためです。動的にリンクされたバイナリの場合、実行/lib/ld-linux.so.2 progname
するとうまくいきますが、静的にリンクされたバイナリではそのセグフォールトが発生します。
http://archive.cert.uni-stuttgart.de/bugtraq/2004/01/msg00002.htmlでul_exec1.1を見つけましたが、それは私のシステム上の独自のHello、Worldバイナリのセグメンテーション違反のようです。
1つのオプションは、バイナリのコピーを作成し、そのコピーを実行可能にして、execve()を呼び出すことです。私はそのようなコピーを必要としない解決策を探しています(パフォーマンス上の理由から)。
debugging - VMWareによるユーザーランドプログラムのデバッグ(アンチデバッグ満載)
私は現在、アンチデバッグのトリックがたくさんあるLinuxでプログラムをリバースしようとしています。一部は倒すことができましたが、残りはまだ戦っています。悲しいことに、私は平凡なので、予想以上に時間がかかっています。とにかく、プログラムはVMで問題なく実行されます(VMWareとVBoxで試しました)ので、VMでの実行のトレースを取り、次にデバッガー(gdb)でトレースを取り、それらを比較して確認することを考えていました変更点は、アンチデバッグのトリックをより簡単に見つけることです。
しかし、私はずっと前に vmware でカーネルのデバッグを行いましたが、多かれ少なかれ問題ありませんでした (線形アドレスにアクセスできたことを覚えています...) が、ここでは少し違うと思います。
このユーザーランド プログラムをあまり苦労せずにデバッグする簡単な方法はありますか?
php - ユーザー コード (ネイティブではない) で PHP セッションのようなクラスを作成した人はいますか?
ネイティブの PHP セッション機能は優れていますが、最終的にはシングルトンです。複数のアプリの状態を維持し、既に開始されているセッション (アプリ フレームワークなど) の範囲内で維持する必要がある場合があります。技術的には、変更後にセッションを停止/再開できますsession_name()
が、これはほとんどのアプリでは非現実的/不可能/安全ではありません。session.save_path
1 つのアプリが非ディスク アダプターを使用してセッション データを格納する場合も、共有を使用することはできません。
ネイティブ セッションの機能をユーザー コードで実行できない理由はないので、これを実行した人はいますか?
更新 1: CI_Sessionは確かに便利なコードを含むユーザーランドの実装ですが、CodeIgniter と高度に結合されています。
更新 2:これはすばらしい API です。
更新 3: PHP5.3の実装を作成しました。
ios - iOS 脱獄 - これはどのように起こるのですか?
ハッカーがどのようにしてジェイルブレイクを作成するのか疑問に思っています。ユーザーランド エクスプロイトとカーネル エクスプロイトの意味は知っています。ユーザーランド エクスプロイトがある場合、カーネル エクスプロイトを見つける必要があることは知っています。しかし、「ペイロード」、「ROP」、 「ROP Payload」、「payload」。これがユーザーランドとカーネルのエクスプロイトとどのように相互接続するのか??? 誰かがこれを「計画」できますか?ありがとう
c - ユーザーレベルスレッドライブラリの実装 新しいスレッドの開始 [宿題]
私はこれを見ました:ユーザーレベルのスレッドパッケージの実装とそれは適用されません。
スレッドを割り当ててスタックを作成するThread_new (int func(void*)) の実装中に、私が正しい場合、プログラム カウンター (%eip) を設定する方法を考えることができないため、スレッドがスケジューラによって開始されると、指定された関数の (func) エントリ ポイントから開始されます。
多くの c のみ (アセンブリなし) の実装を見てきましたが、次のコード (x86) が提供されています。
%edi をスタックにプッシュする特定の理由はありますか? バイトコピー以外にesi/ediの別の用途が見つからないようです。
*%esi への間接呼び出しは、おそらく新しいスレッドのコンテキストから関数を呼び出すために使用されることを認識していますが、それとは別に、%esi が有効な関数であることをどのように (または何を) 指しているのか理解していないようです。 Thread_new から _thrstart を呼び出したときのアドレス
ノート:
Thread_exit は、c で実装されたクリーンアップ スレッドです。
これは宿題です
c - ユーザー空間に再配置不可能な静的 ELF バイナリをロードする
静的にリンクされた(動的にリンクされていない)再配置不可能なバイナリ(つまり、-pie、-fPIEなどで構築されていない)をロードできる基本的なユーザー空間ELFローダーを作成しようとしています。今のところ x86 CPU で動作するはずです。
ユーザー空間でCのELFファイルをロードするコードに従いましたが、実行可能ファイルが再配置可能な場合はうまく機能しますが、プログラムが間違った仮想メモリ範囲にロードされて即座にクラッシュするため、そうでない場合は予想通り完全に失敗します。
しかし、予想される仮想オフセットでプログラムをロードするように変更しようとしましたが (phdr.p_vaddr を使用)、複雑な問題に遭遇しました: 私のローダーは既にその仮想メモリ範囲を使用しています! 私はそれをmmapすることはできません。ましてや、それに何かを書き込むことはできません。ローダー自体のコードを完了する前に上書きせずに、再配置不可能なバイナリをローダーのアドレス空間にロードできるようにするには、どうすればよいですか? ローダーを完全に異なる仮想メモリ範囲から実行する必要がありますか。おそらく、リンカを取得して、再配置不可能なバイナリの通常の仮想メモリ範囲よりもはるかに上にリンクさせる必要がありますか (私の場合は 0x400000 で始まります) またはそれには何かトリックがありますか?
ELF のドキュメント (ちなみにここでは ELF64 を使用していますが、ELF32 と ELF64 は非常に似ていると思います) と Web 上の多くのドキュメントを読みましたが、まだ理解できません。
ELF ローダーがこの複雑な問題をどのように処理するかを誰か説明できますか? ありがとう!
php - root 権限なしで新しい Web サーバーを実行する
PHP 7 が出たらそれを使いたいと思っていますが、サーバー管理者は PHP 5.3.3 以降のアップグレードを拒否しており、root 権限を持っていません。ポート 1024 以上でWeb サーバーを実行できますが、ポート 80 と 443 で使用できるようにする必要があります。
PHPのローカル SOCKS クライアントを介して、このユーザーランド Web サーバーに接続することを検討しています。この方法で、ポート 80 と 443 で PHP 7 Web サーバーを効果的に実行できますか? また、PHP リクエストとセッションを正しく処理できますか?