IDA逆コード---stack_chk_guard変数の後の局所はどう処理しますか

1005 ワード

シーン:IDA逆コードの場合、逆コンパイルされた境界検出が見られますが、一般的に最後の4バイトの局所変数Aを用いて境界検出を行いますが、Bの場合、この境界の後ろに局所変数Bが定義されている場合もあります.逆コンパイルされたコードによると、このBには実際の意味がないことがわかります.コードは、前のローカル変数にオフセットアクセスするためにアドレスを使用します.
  char s_reqcomand[100]; // [sp+14h] [bp-ECh]@1
  unsigned __int8 v12; // [sp+7Ah] [bp-86h]@1 sp + 0x78       
  unsigned __int8 v13; // [sp+7Bh] [bp-85h]@1
  int v14; // [sp+DCh] [bp-24h]@1
  char v15; // [sp+E0h] [bp-20h]@2     v15,       ??

  v14 = _stack_chk_guard;
     v15      ???            ??

       :
  v8_temp = (unsigned __int8)*(&v15 + (v10_recbuf[3] & 3) - 0xD0) + ((v10_recbuf[3] + (v10_recbuf[2] << 8)) & 0xFFFC); //             ;
	
     v15             ,       ,              v15      ;

解決方法:このようなコードは直接使用することはできません.現在、2つの解決方法があります.第1の方法は、V 15のアドレス使用を分析するときに、どの局所変数に具体的にオフセットしたのか、これは動的にデバッグして決定する必要があります.第2の方法:このオフセット方式に適した局所変数を作成し、sp+XXhのデータ値に注意します.      s_reqcomandの開始アドレスはsp+14で、長さは100バイトなので、終了アドレスはsp+78 s_reqcomandとv 12の間に2バイトの空きがあります.unsigned chを追加します.