Итак, имеем код для отладки того что происходит:
#define x86_emit_byte(value) \<br/>
*translation_ptr = value; \<br/>
translation_ptr++ \<br/>
<br/>
void function_cc x86_emit_translation_exit(p_u8 *p_translation_ptr)<br/>
{<br/>
u8* translation_ptr = *p_translation_ptr;<br/>
x86_emit_byte(0x90);<br/>
.... и так 100 строк...<br/>
x86_emit_byte(0x90);<br/>
*p_translation_ptr = translation_ptr;<br/>
}<br/>
Это кусок динамического транслятора, или же рекомпайлера. Изначально тут должен эмититься код размером около 100 байт, для теста представим что это все nop-ы. Так вот. Если емитить эти 100 байт вот так влоб, то транслятор перестает работать, не падает, просто перестает. По непонятным причинам. Если этот код заменить на цикл эмиттинга хоть килобайта nop-ов — все замечательно. Тоесть что зависит от размера самого транслятора а не кода что он эмитит. Обьектники транслятора относительно небольшие, до метра все 10 штук. Я уже 2 дня бьюсь над этим, но ничего пока не получается. Изначально транслятор не мой, я его редактирую, потому особо много рассказать не могу. Потому если что-то важное не уточнил, спрашивайте конечно. То что меня беспокоит — это одна функция которая вызывает этот кусок. Она размером в обьектнике около 0x70000 байт (о_О?). Уже не знаю на что грешить, поскольку транслятор не валится. Он просто перестает адекватно работать.