Весь геморой то что у меня даже без нее компилить нехочет....
Может быть, ты нам поведаешь текст ошибки?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
но у меня оно не отображаеца что я его отправил в чем соль?
А как оно должно отображаться? В твоём коде я не вижу ничего, что отображало бы удачно отправленный пакет.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
//---------------------------------------------------------------------------
void Print(DWORD dwColor, wchar_t* Text)
{
DWORD Function = 0x417E00;
__asm {
mov ecx,dword ptr [BA]
mov ecx,dword ptr [ecx+0x24] // указатель на интерфейс что ли..
push Text // собственно текст
push dwColor // цвет, включая непрозрачность
call Function
}
}
//---------------------------------------------------------------------------
Применение (из DLL):
Код:
Print(0xFFCEABEF,L"Hello, Perfect World!");
Цвет это обычный DWORD. Жёлтым цветом я выделил байт непрозрачности (0 - полностью прозрачный текст, т.е. невидимый; FF - абсолютно непрозрачный).
Остальные три байта - соответствующие цвета RGB.
Второй параметр - юникод-строка.
Результат (функция вызвана много-много раз):
[Ссылки могут видеть только зарегистрированные пользователи. ]
Пригодится разработчикам для выведения на экран полезной информации (особенно при создании DLL).
Естественно, это на любителя - можно выводить такую полезную инфу в файл.
Последний раз редактировалось BritishColonist; 13.02.2012 в 19:00.
//---------------------------------------------------------------------------
void Print(DWORD dwColor, wchar_t* Text)
{
DWORD Function = 0x417E00;
__asm {
mov ecx,dword ptr [BA]
mov ecx,dword ptr [ecx+0x24] // указатель на интерфейс что ли..
push Text // собственно текст
push dwColor // цвет, включая непрозрачность
call Function
}
}
//---------------------------------------------------------------------------
Применение (из DLL):
Print(0xFFCEABEF,L"Hello, Perfect World!");
Цвет это обычный DWORD. Жёлтым цветом я выделил байт непрозрачности (0 - полностью прозрачный текст, т.е. невидимый; FF - абсолютно непрозрачный).
Остальные три байта - соответствующие цвета RGB.
Второй параметр - юникод-строка.
Пригодится разработчикам для выведения на экран полезной информации (особенно при создании DLL).
Естественно, это на любителя - можно выводить такую полезную инфу в файл.
кто нибудь может переделать на DELPHI очень надо )
________________
если я не ошибаюсь, а могу и ошибаться ...
too many actual parameters
Function Print(dwColor: dword, Text: string);
var
DwordFunction:pointer;
begin
DwordFunction:=Pointer($417E00);
asm
mov ecx,dword ptr [BA]
mov ecx,dword ptr [ecx+0x24] // указатель на интерфейс что ли..
push Text // собственно текст
push dwColor // цвет, включая непрозрачность
call DwordFunction
end;
end;
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
Function Print(dwColor: dword, Text: string);
var
DwordFunction:pointer;
begin
DwordFunction:=Pointer($417E00);
asm
mov ecx,dword ptr [BA]
mov ecx,dword ptr [ecx+0x24] // указатель на интерфейс что ли..
push Text // собственно текст
push dwColor // цвет, включая непрозрачность
call DwordFunction
end;
end;
Что неправильного с моей точки зрения:
1) возможно, параметры в объявлении функции следует записывать через точку с запятой, а не через запятую;
2) в дельфи шестнадцатеричные числа записываются с префиксом $, а не 0x;
3) возможно, нельзя push'ить переменные Text и dwColor (но это вряд ли).
Кстати, если хотите пилить инжект, то ещё следует добавить операции pushad и popad после ключевого слова asm и перед end соответственно.
Последний раз редактировалось BritishColonist; 21.02.2012 в 20:33.
1) возможно, параметры в объявлении функции следует записывать через точку с запятой, а не через запятую; именно запятую
2) в дельфи шестнадцатеричные числа записываются с префиксом $, а не 0x; так и записано $FFCEABEF
Цитата:
Сообщение от BritishColonist
Кстати, если хотите пилить инжект, то ещё следует добавить операции pushad и popad после ключевого слова asm и перед end соответственно. что то не подумал )
но так точно не работает
Код:
Procedure PrintPW(dwColor:dword;Text:string);
var
CallAddress:pointer;
begin
CallAddress:=pointer($417E00);
asm
mov ecx,dword ptr [base_addr]
mov ecx,dword ptr [ecx + $24]
push Text
push dwColor
call CallAddress
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
PrintPW($FFCEABEF,'Perfect World!');
end;
________________
если я не ошибаюсь, а могу и ошибаться ...
too many actual parameters
Последний раз редактировалось zaparca; 21.02.2012 в 20:36.