Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Допустим есть функция onLog на асм
onLog
[SRC="asm"].const
Init dq 140019EA8h
Printf dq 140009148h
.data?
msg db ?
.code
onLog proc
xor ecx, ecx
call Init
mov rcx, rax
lea rdx, msg
call Printf
ret
onLog endp
end[/SRC]
из С++ юзаю так
[SRC="c++"]onLog("Test message");[/SRC]
Вопрос в том как в асм прочитать строку "Test message"?
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Что значит "прочитать"? Получить указатель?
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Zubastic Написал:Что значит "прочитать"? Получить указатель?
ну коротко говоря нужно занести строку из параметров в переменную msg
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
flopix Написал:Зависит от соглашения вызова. Если fastcall то указатель на строку будет в регистре ECX.
https://ru.wikipedia.org/wiki/%D0%A1%D0%...0%B2%D0%B5
fastcall
Делаю вот так вот, но в Msg пишет что то другое..явно не мою строку.
Туда пишет какие то странные символы..
[SRC="asm"]mov [OFFSET msg], ecx[/SRC]
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
Попробуйте указатель на указатель.
Ну или чтобы не гадать посомтрите под отладчиком. Может быть значение в стеке.
Сообщений: 269
Тем: 20
Зарегистрирован: Jan 2010
Репутация:
221
Вы пытаетесь вызвать "Printf" с нужным параметром я так понимаю. Код функции Printf покажите.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Akumu Написал:Вы пытаетесь вызвать "Printf" с нужным параметром я так понимаю. Код функции Printf покажите.
Если статически прописать msg db "Test message", 0 то функция отобразит то что нужно, а если я пытаюсь делать как сейчас
[SRC="c++"]
extern "C" void __fastcall onLog(const char* Format);
onLog("Test message");
[/SRC]
[SRC="asm"]
.const
Init dq 140019EA8h
Printf dq 140009148h
.data?
msg db ?
.code
onLog proc
mov [offset msg], rcx
xor ecx, ecx
call Init
mov rcx, rax
lea rdx, msg
call Printf
ret
onLog endp
end
[/SRC]
то выдает какие то левые странные символы..
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Собсна пофиксил так
[SRC="asm"]
mov rax, [rcx]
mov [offset msg], rax
[/SRC]
Однако теперь что то творится с размером слова..
[SRC="c++"]onLog("Test\n");[/SRC]
Если так писать то все окей, а если:
[SRC="c++"]onLog("Test text\n");[/SRC]
то остается только Test tex
есть у кого идеи как исправить?
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.