У меня проблема с запуском и отладкой этого фрагмента кода:
bool readSectionHeaders(char* path, int numOfSections, int peSectionsOff, IMAGE_SECTION_HEADER* out) {
bool retr = false; //return value
//open file
FILE* file;
file = fopen (path, "rb");
if(file == NULL) {
perror("WRG"); //TODO
return false;
}
do { //do while(false) only for easier error correction
//seek to first section
fseek(file, peSectionsOff, SEEK_SET);
//read all sections
unsigned int count;
IMAGE_SECTION_HEADER sectionHeaders[numOfSections];
count = fread(sectionHeaders, sizeof(IMAGE_SECTION_HEADER), numOfSections, file);
//check Bytes count
if(count != sizeof(IMAGE_SECTION_HEADER)*numOfSections) {
break;
}
//copy sections
memcpy(out, sectionHeaders, count);
//exit successfully
retr = true;
} while(false);
//exit
fclose(file);
return retr;
}
Что странно, это то, что он возвращает false, даже когда читает файл. Я попытался отладить его, и вот самая странная часть.
Я иду построчно до этого
if(file == NULL) {
Тогда, даже если файл не равен NULL, он пропускает perror и перемещается в
return false;
Но не возвращается вообще.
Я снова иду построчно, пока
retr = true;
, где, кажется, что-то делает, однако retr остается ложным.
Затем он закрывает файл и возвращает значение false.
Я никогда не сталкивался с чем-то подобным.
Я пытался очистить проект, перестроить, даже удалить файлы и загрузить их из Subversion. Прежде чем использовать эту функцию, я использую аналогичную - я читаю PE заголовки. Таким образом, я думаю, что проблема может быть в чтении файла, но это не объясняет поведение отладки.
После возвращения из функции я использую perror, и она пишет No error.
Я использую Mingw с QtCreator.
Заранее спасибо.