В простой программе ниже команда указывает на 400 байтов в куче. Затем я копирую "./search '" в команду, *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);
}
Но когда я смотрю на *command и *buffer в gdb, я вижу вот что.
char * command 0x601010 "./search '", 'A' <repeats 186 times>...
char * buffer 0x60101e 'A' <repeats 200 times>...
Во-первых, я ожидал, что он будет повторять 299 раз, а во-вторых, я ожидал, что повторы команд и буферов будут иметь одинаковое значение. Может кто-нибудь, пожалуйста, скажите мне, что мне не хватает?
command
после того, как они были освобождены? - person Paul Hankin   schedule 03.02.2013"\'"
) кажутся мне странными... - person Sam   schedule 03.02.2013malloc()
! - person   schedule 03.02.2013