Visual Basic 6 Регулярное выражение [шестнадцатеричное] не может заменить должным образом - PullRequest
2 голосов
/ 12 октября 2011

Я пытаюсь заменить нативный 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; (что я сделаю позже со вторым проходом).

1 Ответ

1 голос
/ 12 октября 2011

плохое регулярное выражение ...

вместо

"PUSH ([A-F0-9\s]+)"

Я должен был использовать

"PUSH ([A-F0-9]+)"

\s захватывал новые линии.

...