IDAを使ったプログラムの解析、初歩的なC言語の解説

IDAを使ってプログラムの解析で詰まってしまったので質問させて頂きます。
初歩的なC言語のコード解説になると思いますがよろしくお願いします。

コード

C

1void sub_1(){2 char *v0;3 v0 = (char *)sub_2();4 sub_3(&unk, v0);5}6 7const char *sub_2()8{9 return "test:word";10}11 12// _BYTEは調べたところIDAによる推測で型不明の値ということらしいです。この場合はポインタ?13_BYTE *__fastcall sub_3(_BYTE *result, _BYTE *a2) 14{15 char v2;16 unsigned __int8 *v3;17 int v4;18 19 v2 = *a2;20 if ( *a2 )21 {22 v3 = a2 + 1;23 do24 {25 *result++ = v2;26 v4 = *v3++;27 v2 = v4;28 }29 while ( v4 );30 }31 *result = 0;32 return result;33}

解説して頂きたい部分

  • 3行目のv0に入っている中身は何でしょうか?

2行目でポインタ変数を宣言しているので「test:word」という文字列が格納されているアドレスが入っているのかと推測しました。(char *)のキャストが何をしているのかも曖昧です。

  • 19行目のv2に入っている中身は何でしょうか?

第ニ引数のa2の値が入っているのかと推測しましたが、char型なので1バイトの値?
そうすると3行目のv0の値も1byteの値が入っている?

  • 23行目以降のdo...whileは何をしていますか?

推測ではv4の値が1以上の間だけ回るもので、第一引数で指定されたアドレスから順に計算した値を入れていくようなものに見えます。ループを止めるのは指定されたアドレスに値が入っていなかった場合?

急ぎではないのでお時間のある方、回答をお願いします。

コメントを投稿

0 コメント