Вот код:
__declspec ( naked ) void nseel_asm_assign(void)
{
__asm
{
fld qword ptr [eax]
fstp qword ptr [ebx]
}
}
__declspec ( naked ) void nseel_asm_assign_end(void) {}
Код, который их потребляет, вылетает.Отладчик показывает, что адреса в порядке, например,
&nseel_asm_assign 0x0f45e4a0 {vis_avs.dll!nseel_asm_assign(void)} void(*)()
&nseel_asm_assign_end 0x0f45e4b0 {vis_avs.dll!nseel_asm_assign_end(void)} void(*)()
Однако, когда адрес этих функций берется самим кодом C, а не отладчиком, он перестает быть корректным, и код потребления падает, потому что размеротрицательно:
fn 0x0f455056 {vis_avs.dll!_nseel_asm_assign} void(*)()
fn_e 0x0f45295f {vis_avs.dll!_nseel_asm_assign_end} void(*)()
Подчеркнутые функции содержат только одну инструкцию, например jmp nseel_asm_assign
Как получить адреса реальных функций без подчеркивания?
Обновление: на тот случай, если вам интересно, почему я написал такой код, это был не я, это сторонний , и он прекрасно работал при сборке с VC ++ 6.0.