Я пытаюсь заменить нативный x86 asm на код C ++, чтобы я мог сделать эмулятор.
Я получил это
If ereg(ASM, "PUSH ([A-F0-9\s]+)", False) Then
ASM = ereg_replace(ASM, "PUSH ([A-F0-9\s]+)", _
"regs.d.esp -= 4;" & vbNewLine & _
"*(unsigned int *)(regs.d.esp) = $1;", False)
End If
Функции, которые я нашел в интернете .. должны работать .. как они есть в Google.
Function ereg(strOriginalString, strPattern, varIgnoreCase)
' Function matches pattern, returns true or false
' varIgnoreCase must be TRUE (match is case insensitive) or FALSE (match is case sensitive)
Dim objRegExp: Set objRegExp = New RegExp
With objRegExp
.Pattern = strPattern
.IgnoreCase = varIgnoreCase
.Global = True
End With
ereg = objRegExp.test(strOriginalString)
Set objRegExp = Nothing
End Function
Function ereg_replace(strOriginalString, strPattern, strReplacement, varIgnoreCase)
' Function replaces pattern with replacement
' varIgnoreCase must be TRUE (match is case insensitive) or FALSE (match is case sensitive)
Dim objRegExp: Set objRegExp = New RegExp
With objRegExp
.Pattern = strPattern
.IgnoreCase = varIgnoreCase
.Global = True
End With
ereg_replace = objRegExp.Replace(strOriginalString, strReplacement)
Set objRegExp = Nothing
End Function
Я начинаю с.
/* 401187 */
PUSH 466F20
и хочу закончить ..
/* 401187 */
regs.d.esp -= 4;
*(unsigned int *)(regs.d.esp) = 466F20;
Но функция выше, побежал заканчивается ..
/* 401187 */
regs.d.esp -= 4;
*(unsigned int *)(regs.d.esp) = 466F20
;
.. Err, не беспокойтесь о том, что это не 0x466F20; (что я сделаю позже со вторым проходом).