Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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 (cpp) [Seleccionar]
invoke GetModuleFileName, 0, addr temp, 256
mov esi, esp
push esi

;Solo el path
.if i == 1

xor eax,eax 
loop_len:
mov dl,[esi]
    .if dl == 5Ch; \
    mov eax, esi
    .elseif dl == 0
    jmp done
    .endif
     
inc esi
jmp loop_len

done:
; Aqui teniendo la posicion del ultimo \ quiero sobreescribirla con un caracter nulo para cuando coja "esi" solo me devuelva el path
mov eax, 0
.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: cpu2 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.

CitarEjemplo:

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.