Заменить конкретную строку (после) в файле в Python - PullRequest
0 голосов
/ 10 ноября 2019

Заменить определенную строку (ниже) в файле на Python

У меня есть текстовый файл, похожий на следующий:

test   al,al
jne    0x514 <asm4+23>
mov    DWORD PTR [ebp-0x8],0x1
jmp    0x587 <asm4+138>
mov    edx,DWORD PTR [ebp-0x8]

Мне нужно, чтобы результат был таким

test   al,al
jne    asm4+23
mov    DWORD PTR [ebp-0x8],0x1
jmp    asm4+138
mov    edx,DWORD PTR [ebp-0x8]

Ответы [ 3 ]

1 голос
/ 10 ноября 2019

Это может работать для вашего примера. Я использовал регулярные выражения Python

import re

regex = r"(0.+<)(.+)>"
input_string="""
test   al,al
jne    0x514 <asm4+23>
mov    DWORD PTR [ebp-0x8],0x1
jmp    0x587 <asm4+138>
mov    edx,DWORD PTR [ebp-0x8]

"""
output=re.sub(r"(0.+<)(.+)>", r"\2", input_string)
print(output)

Надеюсь, это поможет

0 голосов
/ 10 ноября 2019

Вы преобразуете разборку во что-то, что может быть повторно собрано.

Вместо постобработки вывода GDB или objdump -drwC -Mintel, используйте дизассемблер, который в первую очередь выдает фактический синтаксис GAS или NASM, с дополнительной информацией в комментариях. Специально для x86, Agner Fog's objconv.

См. Как сгенерировать ассемблерный код с помощью gcc, который можно скомпилировать с помощью nasm , например, для вывода.

(я не думаю, что он может быть нацелен на GAS .intel_syntax, только на GAS, NASM / YASM или MASM. Но GAS .intel_syntax похож на MASM, за исключением директив, так что это может быть полезно. Или если вы неНе забывайте о синтаксисе AT & T, его можно собрать напрямую без установки NASM.)

0 голосов
/ 10 ноября 2019

Вы можете использовать только метод ".startswith":

test = """
    test   al,al
    jne    0x514 <asm4+23>
    mov    DWORD PTR [ebp-0x8],0x1
    jmp    0x587 <asm4+138>
    mov    edx,DWORD PTR [ebp-0x8]
    """.splitlines()

i = 0
while i < len(test):
    if test[i].startswith("jne"):
        test[i] = "jne    0x514 <asm4+23>"
    elif test[i].startswith("jmp"):
        test[i] = "jmp    0x587 <asm4+138>"
    i += 1

print("\n".join(test))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...