Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Программирование / Programming (https://forum.zone-game.info/forumdisplay.php?f=98)
-   -   [Asm] Прочитать параметры (https://forum.zone-game.info/showthread.php?t=41335)

Sojang 27.08.2016 20:13

[Asm] Прочитать параметры
 
Допустим есть функция onLog на асм

onLog:
Свернуть ↑Развернуть ↓

из С++ юзаю так
onLog("Test message");
Code: C++
Вопрос в том как в асм прочитать строку "Test message"?

Zubastic 27.08.2016 20:20

Re: [Asm] Прочитать параметры
 
Что значит "прочитать"? Получить указатель?

Sojang 27.08.2016 20:28

Re: [Asm] Прочитать параметры
 
Цитата:

Сообщение от Zubastic (Сообщение 417945)
Что значит "прочитать"? Получить указатель?

ну коротко говоря нужно занести строку из параметров в переменную msg:)

flopix 27.08.2016 20:45

Re: [Asm] Прочитать параметры
 
Зависит от соглашения вызова. Если fastcall то указатель на строку будет в регистре ECX.

https://ru.wikipedia.org/wiki/%D0%A1...BE%D0%B2%D0%B5

Sojang 27.08.2016 20:53

Re: [Asm] Прочитать параметры
 
Цитата:

Сообщение от flopix (Сообщение 417949)
Зависит от соглашения вызова. Если fastcall то указатель на строку будет в регистре ECX.

https://ru.wikipedia.org/wiki/%D0%A1...BE%D0%B2%D0%B5

fastcall
Делаю вот так вот, но в Msg пишет что то другое..явно не мою строку.
Туда пишет какие то странные символы..
mov [OFFSET msg], ecx
Code: ASM

flopix 27.08.2016 22:05

Re: [Asm] Прочитать параметры
 
Попробуйте указатель на указатель.

Ну или чтобы не гадать посомтрите под отладчиком. Может быть значение в стеке.

Akumu 27.08.2016 22:16

Re: [Asm] Прочитать параметры
 
Вы пытаетесь вызвать "Printf" с нужным параметром я так понимаю. Код функции Printf покажите.

Sojang 27.08.2016 22:22

Re: [Asm] Прочитать параметры
 
Цитата:

Сообщение от Akumu (Сообщение 417953)
Вы пытаетесь вызвать "Printf" с нужным параметром я так понимаю. Код функции Printf покажите.

Если статически прописать msg db "Test message", 0 то функция отобразит то что нужно, а если я пытаюсь делать как сейчас
 
extern "C" void __fastcall onLog(const char* Format);
onLog("Test message");
 
Code: C++
 
.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
 
 
Code: ASM
то выдает какие то левые странные символы..:(

Sojang 27.08.2016 23:05

Re: [Asm] Прочитать параметры
 
Собсна пофиксил так
 
mov   rax, [rcx]
mov   [offset msg], rax
 
Code: ASM
Однако теперь что то творится с размером слова..
onLog("Test\n");
Code: C++
Если так писать то все окей, а если:
onLog("Test text\n");
Code: C++
то остается только Test tex
:( есть у кого идеи как исправить?

Akumu 28.08.2016 00:07

Re: [Asm] Прочитать параметры
 
Цитата:

Сообщение от Sojang (Сообщение 417955)
:( есть у кого идеи как исправить?

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

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


Текущее время: 15:30. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot