Всем привет, решил переписать LoadPE от одного хорошего человека так, чтобы можно было перевести в шеллкод и все работало. Как альтернативу встроенному memcpy юзаю самописный с тем же функционалом. Однако загвоздка в том, что я вызываю свою memcpy 2 раза - все ок, вызываю третий раз - компилятор дает ошибку "неразрешенный внешний символ _memcpy". Подскажите, как быть?
Ошибка возникает при отключении оптимизации всей программы.
C++:
void* MyMemcpy(void* dest, const void* src, size_t bytes)
{
byte* cdest = (byte*)dest;
const byte* csrc = (byte*)src;
for (size_t i = 0; i < bytes; ++i) *cdest++ = *csrc++;
return dest;
}
...
retadr = (unsigned long)pVirtualAlloc(0, PeHeader.OptionalHeader.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (retadr) // если память выделилась
{
// скопируем туда DOS заголовок
MyMemcpy((void*)retadr, &DosHeader, sizeof(IMAGE_DOS_HEADER));
// скопируем туда PE заголовок
MyMemcpy((void*)(retadr + DosHeader.e_lfanew), &PeHeader, sizeof(IMAGE_NT_HEADERS));
// ошибка возникает при использовании последующих MyMemcpy
// скопируем туда таблицу секций
MyMemcpy((void*)(retadr + DosHeader.e_lfanew + sizeof(IMAGE_NT_HEADERS)), &Section[0], sizeof(IMAGE_SECTION_HEADER) * PeHeader.FileHeader.NumberOfSections);
...
}
Последнее редактирование: