28.08.2016, 13:42
|
#19
|
Пользователь
Регистрация: 09.01.2016
Адрес: Москва
Возраст: 34
Сообщений: 357
Отблагодарили 19 раз(а)
|
Re: [Asm] Прочитать параметры
Цитата:
Сообщение от Akumu
format PE64 console
entry start
include 'win64a.inc'
section '.text' code readable executable
start:
lea rax,[testmsg]
call onLog
xor rax,rax
call [ExitProcess]
int3
onLog:
; fix me
mov rsi,rax ; src str
lea rdi,[msgbuf] ; dst buff
mov rdx, 511 ; max chars
call strncpy ; copt string from [rax] to [msgbuf]
retn
int3
strncpy:
push rbp
mov rbp, rsp
xor rcx, rcx
jloop:
cmp BYTE [rsi + rcx], 0
je jend
cmp rcx, rdx
je jend
mov al, [rsi + rcx]
mov [rdi + rcx], al
inc rcx
jmp jloop
jend:
mov BYTE [rdi + rcx], 0
mov rax, rdi
mov rsp, rbp
pop rbp
ret
section '.data' data readable writeable
testmsg db "This is a test message!",0
msgbuf rb 512
section '.idata' import readable writeable
library kernel32,'KERNEL32.DLL'
include 'api/kernel32.inc'Code: ASM fasm
|
Цитата:
Сообщение от Ugly
msg db 32 ; это буфер в один байт со значением 0x20
msg db 32 dup(0) ; надо так. это буфер в 32 байта, заполненный нулями
и если правильно понял, то
mov rsi, [rcx] ; это копирует в rsi байты по адресу
mov rsi, rcx ; а надо так, чтобы поместить в rsi сам адрес
|
Спасибо ребят) все работает.
Мне тут кое где сказали что выделять память так(msg db 32 dup(0)) не совсем правильно..мол есть лучше способы. Можете по этому поводу подсказать?
__________________
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
|
|
|