Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: SheKeL_C$ en 5 Abril 2015, 22:43 pm



Título: Reemplazar caracter
Publicado por: SheKeL_C$ en 5 Abril 2015, 22:43 pm
Estoy empezando con ensamblador y haciendo pequeños projectos...

Lo que quiero es recibir el path del propio ejecutable:

Supongo que habra otras formas de hacerlo, mas rapidas o quizas mas eficaces, pero quiero ir teniendo soltura con asm

Código
  1. invoke GetModuleFileName, 0, addr temp, 256
  2. mov esi, esp
  3. push esi
  4.  
  5. ;Solo el path
  6. .if i == 1
  7.  
  8. xor eax,eax  
  9. loop_len:
  10. mov dl,[esi]
  11.   .if dl == 5Ch; \
  12.   mov eax, esi
  13.   .elseif dl == 0
  14.   jmp done
  15.   .endif
  16.  
  17. inc esi
  18. jmp loop_len
  19.  
  20. done:
  21. ; Aqui teniendo la posicion del ultimo \ quiero sobreescribirla con un caracter nulo para cuando coja "esi" solo me devuelva el path
  22. mov eax, 0
  23. .endif

EDIT:

He logrado hacerlo poniendo esto

mov ebx, 0
mov [eax], ebx 



No abro otro hilo ya que esta duda esta relacionada con lo anterior...

Esto es lo que tengo:
ESI: apunta a toda la cadena
EAX: Apunta a una posicion dentro de esa cadena

Como hago para que esi "apunte" a la direccion que esta en EAX

Ejemplo:

String original: "Mi casa tiene dos ventanas"
ESI apunta a "M" y sigue hasta encontrar un caracter nulo, por lo tanto obtendria la string original
Si reemplzazo el caracter "d" de la palabra "dos", obtendre a partir de ESI => "Mi casa tiene ", ahora lo que quiero obtener es "os ventanas"


Título: Re: Reemplazar caracter
Publicado por: ivancea96 en 6 Abril 2015, 15:26 pm
mov esi,eax no funcionaría?


Título: Re: Reemplazar caracter
Publicado por: xv0 en 6 Abril 2015, 21:25 pm
Porque no explicas mejor el problema, es dificil ayudarte de esta forma.

Citar
Esto es lo que tengo:
ESI: apunta a toda la cadena
EAX: Apunta a una posicion dentro de esa cadena

Como hago para que esi "apunte" a la direccion que esta en EAX

Si es esa la duda, @ivancea96 ya te dio la respuesta, simplemente haz un push a ESI por si luego quieres recuperar la anterior direccion.

Citar
Ejemplo:

String original: "Mi casa tiene dos ventanas"
ESI apunta a "M" y sigue hasta encontrar un caracter nulo, por lo tanto obtendria la string original
Si reemplzazo el caracter "d" de la palabra "dos", obtendre a partir de ESI => "Mi casa tiene ", ahora lo que quiero obtener es "os ventanas"

Que se supone que EAX esta apuntando a la "d"?

Bueno como no entiendo mucho como lo tienes organizado, te digo una forma de hacer eso, recorre la cadena hasta enontrar la "d", eliminala si quieres o si no a partir de localizar la "d" copia el offset, pero sumando desde ese caracter logico.

Un saludo.