Здравствуйте! Я искал какую-нибудь помощь или какое-либо руководство по редактированию или изменению (перезаписи) двоичного файла elf с помощью IDA PRO.Когда я открываю файл с IDA Pro, я ищу, где я хочу редактировать, после чего я нажимаю F5, я вижу псевдокод
void __usercall TSkillFed::Event(TSkillFed *const this@<esi>, char *a2@<eax>, int a3)
{
int v3; // ebx
char *v4; // eax
signed int v5; // edi
_DWORD *v6; // ebx
int v7; // eax
_DWORD *v8; // edi
int v9; // eax
int SecsPerMana; // [esp+18h] [ebp-10h]
v3 = *(_DWORD *)(a3 + 16);
if ( v3 )
{
if ( !*(_BYTE *)(v3 + 656) && !IsProtectionZone(*(_DWORD *)(v3 + 624), *(_DWORD *)(v3 + 628), *(_DWORD *)(v3 + 632)) )
{
SecsPerMana = 6;
v4 = 0;
v5 = 12;
if ( !*(_DWORD *)(v3 + 652) )
v4 = (char *)TPlayer::GetActiveProfession((TPlayer *const )v3);
switch ( (unsigned int)v4 )
{
case 0u:
case 1u:
v5 = 6;
goto LABEL_9;
case 2u:
SecsPerMana = 4;
v5 = 8;
break;
case 3u:
case 4u:
v5 = 12;
goto LABEL_18;
case 0xBu:
v5 = 4;
LABEL_9:
SecsPerMana = 6;
break;
case 0xCu:
v5 = 6;
LABEL_18:
SecsPerMana = 3;
break;
case 0xDu:
case 0xEu:
SecsPerMana = 2;
v5 = 12;
break;
default:
error(v4, "TSkillFed::Event: Unbekannter Beruf %d.\n", v4);
break;
}
if ( !((*(int (__cdecl **)(int))(*(_DWORD *)a3 + 52))(a3) % v5) )
{
v8 = *(_DWORD **)(v3 + 12);
(*(void (__cdecl **)(_DWORD, int))(*v8 + 8))(*(_DWORD *)(v3 + 12), v8[5] + 1);
v9 = v8[6];
if ( v8[5] > v9 )
v8[5] = v9;
}
if ( !((*(int (__cdecl **)(int))(*(_DWORD *)a3 + 52))(a3) % SecsPerMana) )
{
v6 = *(_DWORD **)(v3 + 16);
(*(void (__cdecl **)(_DWORD *, int))(*v6 + 8))(v6, v6[5] + 2);
v7 = v6[6];
if ( v6[5] > v7 )
v6[5] = v7;
}
}
}
else
{
error(a2, "TSkillFed::Event: GetMaster liefert NULL zurueck!\n");
}
}
Как я могу изменить, где он говорит SecsPerMana = 2;
?
Я хочу изменить все строки, где SecsPerMana
.Я хочу изменить их с номером 1?
Также после этого меняется, как сохранить его в файл?