Я пишу DLL, и я бы хотел, после компиляции, добавить некоторые строки к нему в качестве встроенного ресурса.
Для этого я использую Python script, который выглядит примерно так:
hRes = win32api.BeginUpdateResource(myFile, 0)
win32api.UpdateResource(hRes, win32con.RT_STRING, 409, buf, 1033)
win32api.EndUpdateResource(hRes, 0)
И это работает, я вижу строки в PE с моим шестнадцатеричным редактором.
Проблема возникает, когда моя Dll пытается использовать LoadString()
, чтобы вытащить эту строку.
Вызов выглядит примерно так:
LoadString(myDll, 409, someBuf, lenOfBuf);
И моя программа появляется, чтобы удалить ссылку на плохой указатель в вызове LoadString()
.
Является ли моя проблема тем, как я добавляю строку или вытаскиваю ее? И может ли кто-нибудь указать мне пример кода, который выполняет оба действия?
Изменить. Я бы предпочел использовать для этого API Win32.
Глупо мне, мне просто нужно было использовать структуру STRINGTABLE вместо того, чтобы просто демпинг в необработанных строках.
Вы можете сделать это вручную, взяв DLL, добавив данные, которые вы хотите сохранить к нему, и после него целое число 4 байта, содержащее размер добавленных данных в байтах.
Теперь, если вы хотите прочитать данные, прочитайте последние 4 байта файла, интерпретируйте их как целое (порядок байтового байта) и прочитайте это количество байтов с конца файла (если количество байты N, которые вы читаете от END - N - 4
до END - 4
).