парсинг ассемблерного кода в perl - PullRequest
1 голос
/ 06 августа 2010

0000000000033a1b subq $0x28,%rsp

У меня проблемы с извлечением 0x28 из вышеуказанной строки. Я могу извлечь subq из большого списка ассемблерного кода, но я хочу только 0x28, так как это дает мне размер стека. Я думал об использовании функции substr () buy, в ней есть варианты, другая может выглядеть так:

0000000000033a1c subq $0x000000b8,%rsp

в этом случае я хочу только 0x000000b8.

Я использую Perl.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 06 августа 2010

Без кода, я думаю, что вы не избежите знака доллара. Таким образом, вы просите, чтобы он совпадал с концом строки, , а затем '0x28'.

В любом регулярном выражении /\$0x(\p{XDigit}+)/ должно захватывать '28' из этой строки.

1 голос
/ 06 августа 2010

Если вы всегда вводите следующий формат:

instruction_address operand $stack_size,register

Вы можете сделать:

$a = '0000000000033a1b subq $0x28,%rsp';
$a =~s/^.*?\$(.*?),.*$/\1/;
print $a; # prints 0x28
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...