Всем привет. В общем, захотел я использовать функцию из samp.dll для проигрывания аудио потока, то бишь PlayAudioStream. Искал я по мере того, где встречалась надпись "Audio stream: %s". Нашел одну функцию, где встречается ссылка на заветную строку, я решил, что эта функция отвечает за потоковое воспроизведение. Зашел в OllyDbg поставил брейкпоинт на функцию, посмотрел какие аргументы передаются ей в момент включения аудио потока. Попробовал на c++ передать функции такие же агрументы и столкнулся с вылетами.
Часть листинга:
#define SAMP_STREAMINFO 0x3E520000//0x11A2F8
#define SAMP_PLAYSTREAM 0x62DA0//0xB6090
#define TEST_WAVE "http://air.radiorecord.ru:8102/sd90_320"
void PlayStream()
{
DWORD Func = SampBase + SAMP_PLAYSTREAM;
DWORD Info = SampBase + SAMP_STREAMINFO;
char *fm = TEST_WAVE;
/*_asm Этот вариант работает без вылетов, но нету воспроизведения аудио потока
{
mov ecx, fm
push 0x100
push ecx
push Info
call Func
add esp, 0ch
}*/
_asm
{
push 0
push 0
push Info
push 0
push 0
push fm
call Func
}
sprintf(Message, "Тестовый поток был запущен: %s", TEST_WAVE);
SendMsg(Message, 0x12345678);
}
Может кто-нибудь наставит на путь истинный? Как правильно ловить оффсеты, чтобы не было такой вот ерунды?
Часть листинга:
#define SAMP_STREAMINFO 0x3E520000//0x11A2F8
#define SAMP_PLAYSTREAM 0x62DA0//0xB6090
#define TEST_WAVE "http://air.radiorecord.ru:8102/sd90_320"
void PlayStream()
{
DWORD Func = SampBase + SAMP_PLAYSTREAM;
DWORD Info = SampBase + SAMP_STREAMINFO;
char *fm = TEST_WAVE;
/*_asm Этот вариант работает без вылетов, но нету воспроизведения аудио потока
{
mov ecx, fm
push 0x100
push ecx
push Info
call Func
add esp, 0ch
}*/
_asm
{
push 0
push 0
push Info
push 0
push 0
push fm
call Func
}
sprintf(Message, "Тестовый поток был запущен: %s", TEST_WAVE);
SendMsg(Message, 0x12345678);
}
Может кто-нибудь наставит на путь истинный? Как правильно ловить оффсеты, чтобы не было такой вот ерунды?