BuringStraw

BuringStraw

今日は一緒にゲームをしていて、かくれんぼをしました(xxxorrr)。

main 関数の中でプログラムのロジックが見つからない場合、どのように考えますか?

  1. 例外処理が登録されているかどうかを確認してください。また、__cxa_atexitのような終了時に実行される関数もあります。

  2. __lib_start_mainの引数には初期化に使用される関数が含まれています。以下にその定義を示します:

    int __libc_start_main(
    	int (*main) (int, char * *, char * *), 
    	int argc, 
    	char * * ubp_av, 
    	void (*init) (void), 
    	void (*fini) (void), 
    	void (*rtld_fini) (void), 
    	void (* stack_end)
    );
    

    ・有効なユーザー ID が実際のユーザー ID と異なる場合、必要なセキュリティチェックを実行します。
    ・スレッドサブシステムを初期化します。
    ・このダイナミック共有オブジェクトが終了(またはアンロード)する際にリソースを解放するために、rtld_finiを登録します。
    ・プログラムの終了時に実行されるfiniハンドラを登録します。
    ・初期化関数(*init)を呼び出します。
    ・適切な引数で main () を呼び出します。
    ・main () の返り値を使用して exit () を呼び出します。

  3. 文字列やバイト配列の相互参照を使用して、隠された操作を見つけることができます。

したがって、超常現象に遭遇した場合は、パニックにならずに、難易度 1 の問題の隠された操作さえ見つけることができません。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。