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 の問題の隠された操作も見つけられません。

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