Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
[Asm] Прочитать параметры
#1
Допустим есть функция onLog на асм

onLog
из С++ юзаю так
[SRC="c++"]onLog("Test message");[/SRC]
Вопрос в том как в асм прочитать строку "Test message"?
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Ответ
#2
Что значит "прочитать"? Получить указатель?
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#3
Zubastic Написал:Что значит "прочитать"? Получить указатель?
ну коротко говоря нужно занести строку из параметров в переменную msgSmile
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Ответ
#4
Зависит от соглашения вызова. Если fastcall то указатель на строку будет в регистре ECX.

https://ru.wikipedia.org/wiki/%D0%A1%D0%...0%B2%D0%B5
Ответ
#5
flopix Написал:Зависит от соглашения вызова. Если fastcall то указатель на строку будет в регистре ECX.

https://ru.wikipedia.org/wiki/%D0%A1%D0%...0%B2%D0%B5
fastcall
Делаю вот так вот, но в Msg пишет что то другое..явно не мою строку.
Туда пишет какие то странные символы..
[SRC="asm"]mov [OFFSET msg], ecx[/SRC]
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Ответ
#6
Попробуйте указатель на указатель.

Ну или чтобы не гадать посомтрите под отладчиком. Может быть значение в стеке.
Ответ
#7
Вы пытаетесь вызвать "Printf" с нужным параметром я так понимаю. Код функции Printf покажите.
Ответ
#8
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]
то выдает какие то левые странные символы..Sad
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Ответ
#9
Собсна пофиксил так
[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
Sad есть у кого идеи как исправить?
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Ответ
#10
Sojang Написал:Sad есть у кого идеи как исправить?

Использовать функцию strcpy, вместо копирования первых 8 байт регистром rax.
https://github.com/Emeraude/MinilibC-asm...master/src к примеру

Добавлено через 42 секунды
Только буффер сразу сделайте достаточно большим
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)