Почему моно функция mono_assembly_load_from_full Break на определенных сборкахC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему моно функция mono_assembly_load_from_full Break на определенных сборках

Сообщение Anonymous »

Я только начал иметь эту проблему только недавно. Проблема возникает, когда я пытаюсь вызвать mono_assembly_load_from_full; это просто ломается. Там нет ошибки, и ничто не возвращается - это просто останавливается. Это может быть связано с размером сборки, но я пытался с сборками менее 10 кб, и это все еще не работает. , и это сработало нормально. Я не знаю, почему это не работает с конкретными собраниями. Я также попробовал новую сборку, которая не работает с кодом, а также старой. Только старый работал. Я связал как работающие, так и неработающие сборки ниже. Вот код, который я использую. И прежде чем кто-то спросит, да, неработающая сборка действительна и загружается, когда я его декомпиляю. Моно функции действительны, и они работали раньше; Это просто не работает с неработающей сборкой сейчас. с. Надеемся, что кто -то еще столкнулся с этой проблемой и нашел решение. Спасибо! < /P>
код инъекции < /p>

Код: Выделить всё

        MonoDomain* mDomain = mFunctions.MonoGetRootDomain();
if (mDomain == nullptr) {
printf("[ DllMain ] Failed to get Mono root domain!\n");
return false;
}

MonoThread* mThread = mFunctions.MonoThreadAttach(mDomain);
if (mThread == nullptr) {
printf("[ DllMain ] Failed to attach thread to Mono domain!\n");
return false;
}

MonoImageOpenStatus imageStatus;
MonoImage* mRawImage = mFunctions.MonoOpenAssemblyFromData((char*)data.data(), data.size(), true, &imageStatus);
if (imageStatus != MONO_IMAGE_OK) {
printf("[ DllMain ] Failed to load Mono assembly from data.\n");
return false;
}

printf("[ DllMain ] Assembly loaded successfully.\n");

MonoImageOpenStatus status;
MonoAssembly* mAssembly = mFunctions.MonoLoadAssemblyFromData(mRawImage, ("\0"), &status, false);
if (mAssembly == nullptr) {
printf("[ DllMain ] Failed to load Mono assembly from image.\n");
return false;
}
if (status == MONO_IMAGE_OK)
{
printf("[ DllMain ] Image is ok.\n");
}
else if (status == MONO_IMAGE_IMAGE_INVALID)
{
printf("[ DllMain ] Image is not ok.\n");
}
< /code>
mono function инициализация < /p>
typedef struct MonoFunctions {
mono_thread_attach MonoThreadAttach;
mono_get_root_domain MonoGetRootDomain;
mono_image_open_from_data MonoOpenAssemblyFromData;
mono_assembly_load_from_full MonoLoadAssemblyFromData;
mono_assembly_get_image MonoAssemblyGetImage;
mono_class_from_name MonoGetClassFromName;
mono_class_get_method_from_name MonoGetMethodFromClass;
mono_runtime_invoke MonoRuntimeInvoke;
mono_string_new MonoStringNew;
} MonoFunctions;

void SetupMonoFunctions(const HMODULE& mHandle, MonoFunctions& mFunctions) {
mFunctions.MonoThreadAttach = (mono_thread_attach)GetProcAddress(mHandle, xorstr_("mono_thread_attach"));
mFunctions.MonoGetRootDomain = (mono_get_root_domain)GetProcAddress(mHandle, xorstr_("mono_get_root_domain"));
mFunctions.MonoOpenAssemblyFromData = (mono_image_open_from_data)GetProcAddress(mHandle, xorstr_("mono_image_open_from_data"));
mFunctions.MonoLoadAssemblyFromData = (mono_assembly_load_from_full)GetProcAddress(mHandle, xorstr_("mono_assembly_load_from_full"));
mFunctions.MonoAssemblyGetImage = (mono_assembly_get_image)GetProcAddress(mHandle, xorstr_("mono_assembly_get_image"));
mFunctions.MonoGetClassFromName = (mono_class_from_name)GetProcAddress(mHandle, xorstr_("mono_class_from_name"));
mFunctions.MonoGetMethodFromClass = (mono_class_get_method_from_name)GetProcAddress(mHandle, xorstr_("mono_class_get_method_from_name"));
mFunctions.MonoRuntimeInvoke = (mono_runtime_invoke)GetProcAddress(mHandle, xorstr_("mono_runtime_invoke"));
mFunctions.MonoStringNew = (mono_string_new)GetProcAddress(mHandle, xorstr_("mono_string_new"));
}
Если есть какая -то Dupelicate, пожалуйста, дайте мне знать, что я не смог найти что -нибудь о проблеме, которое у меня есть.

Подробнее здесь: https://stackoverflow.com/questions/794 ... in-assembl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»