Oficina
Bloco de Notas com linhas numeradas
Seg 28 Mai 2007 20:28 |
- Detalhes
- Categoria: Oficina de Assembly
- Atualização: Quinta, 18 Junho 2009 11:44
- Autor: vovó Vicki
- Acessos: 23202
Fazendo os remendos (patches)
Para não perder tempo é preciso planejar. Planejamos o perfil do código, planejamos sua inserção no executável e agora vamos por a mão na massa. Para inserir os bytes referentes às instruções do primeiro bloco de código, podemos usar (se é que você já não usou) qualquer editor hexadecimal. Afinal, não é tanto código assim.
Para o segundo bloco de código sugiro o uso do Hacker's View (HIEW), pois permite a inserção direta do código assembly, além de calcular os deslocamentos dos jumps. Isto facilita muito o trabalho. Faça as alterações propostas numa cópia do programa notepad.exe.
Os editores mais conhecidos, como você já sabe, mostram o código a partir da posição 0 (zero) e NÃO pelo endereço virtual. Portanto, precisamos conhecer a posição dos endereços virtuais pelo seu deslocamento (offset) a partir da posição zero, o que se consegue subtraindo a base da imagem (00400000) do endereço pretendido. Por exemplo, o deslocamento do endereço 40DACD é DACD (40DACD - 400000 = DACD). Caso você encontre dificuldades, o W32Dasm indica no rodapé o offset de cada linha de código.
Após incluir os dois blocos de código, NÃO SE ESQUEÇA das variáveis. Duas delas precisam ser definidas: a string de formatação e a string do número de linha (veja em tabela de variáveis). Ainda com o editor hexadecimal da sua preferência vá até o offset DB80 e digite o valor da string de formatação. No offset DB90 digite a string do número de linha. Observe que há dois espaços (20 20) antes da palavra linha.
Endereço | Hexadecimal | ASCII |
0040DB70 | 00 00 00 00 00 00 00 00 | ........ |
0040DB78 | 00 00 00 00 00 00 00 00 | ........ |
0040DB80 | 25 23 30 35 64 00 00 00 | %#05d... |
0040DB88 | 00 00 00 00 00 00 00 00 | ........ |
0040DB90 | 20 20 6C 69 6E 68 61 20 | linha |
0040DB98 | 3A 20 00 00 00 00 00 00 | : ...... |
0040DBA0 | 00 00 00 00 00 00 00 00 | ........ |
Testando o novo bloco de notas
Finalmente podemos testar o programa modificado. Já sabemos que a janela-filha "edit" tem uma altura menor do que a janela principal, formando um "rodapé" de 20 pixels (a diferença de altura entre as duas janelas). Este rodapé é usado para imprimir o texto com a indicação dos números de linha. Se tudo estiver em ordem, o aspecto do novo notepad será este:
Recado da vó Vicki
Se você conseguiu chegar até o final deste artigo sem perder o fôlego, considere-se um herói da resistência. Agora, se além de acompanhar o texto ainda conseguiu reproduzir a experiência desta oficina de informática e criar seu bloco de notas com números de linha, seja bem vindo ao clube dos "malucos beleza", os escovadores de bits adeptos da co-engenharia que conseguiram se safar da camisa de força
- << Anterior
- Próximo