我正在尝试将原生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
我在互联网上找到的功能......应该有效..因为它们在谷歌上。
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
;
..错误不要担心它不是0x466F20; (我稍后会做第二遍)。
答案 0 :(得分:1)
糟糕的正则表达......
而不是
"PUSH ([A-F0-9\s]+)"
我必须使用
"PUSH ([A-F0-9]+)"
\s
正在捕捉新线。