以下の単純なプログラムでは、コマンドはヒープ上の 400 バイトを指しています。次に、"./search '" をコマンドにコピーします。*buffer は、" ' " (シングル クォーテーション) の後の次のバイトを指します。buffer が指すメモリを開始するには、memset を使用して 300 バイトを値 0x41 (ASCII 'A') に設定し、単一引用符で閉じます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
int main(int argc, char *argv[]) {
char *command = (char *)malloc(400);
bzero(command, 400);
strcpy(command, "./search \'");
char *buffer = command + strlen(command);
memset(buffer, 0x41, 300);
strcat(command, "\'");
system(command);
free(command);
}
しかし、gdb の *command と *buffer を見ると、これが表示されます。
char * command 0x601010 "./search '", 'A' <repeats 186 times>...
char * buffer 0x60101e 'A' <repeats 200 times>...
最初に、299 回の繰り返しを期待していました。次に、コマンドとバッファの両方の繰り返しが同様の値であると予想していました。誰かが私に何が欠けているか教えてもらえますか?