Вопрос по С++

Mr_Green

New Member
Ответ: Вопрос по С++

Есть код:
BYTE * HookHookJMP = (BYTE *)(0x008771DA);
*HookHookJMP = (BYTE) 0xE9;
DWORD * HookHookSetAddr = (DWORD *) (0x008771DB);
*HookHookSetAddr = (DWORD)HookPacket;
*HookHookSetAddr -= (0x008771DA + 5);
Собственно не понятны почти все строчки… хочется, так сказать, понять о чём речь идёт :).
Интересует только код С

Просто для показания что же такое (DWORD)HookPacket:
HookPacket:
cmp al, 0D1h ;Max PacketId
jnb HookPacket_UnkProtoc
lea rcx, [rbx+r13]
lea rdx, [rsi]
call ReceivePacket
mov rax, 8771E2h
jmp rax

HookPacket_UnkProtoc:
mov rax, 87756Fh
jmp rax
 
Останнє редагування:

Пух

كنت بلهاء
Модератор
Ответ: Вопрос по С++

дайте компилятор языка C (или что там нужно на 1 курсе в политехе)
 

Mr_Green

New Member
Ответ: Вопрос по С++

BYTE * HookHookJMP = (BYTE *)(0x008771DA);
*HookHookJMP = (BYTE) 0xE9; - не ясен смысл, смысл этой строчки в том что указатель HookHookJMP смотрит теперь в 0xE9 или то что было по адресу 0x008771DA теперь смотрит в 0xE9

DWORD * HookHookSetAddr = (DWORD *) (0x008771DB);
*HookHookSetAddr = (DWORD)HookPacket;
*HookHookSetAddr -= (0x008771DA + 5); - похожая ситуация, HookHookSetAddr смотирт на HookPacket или 0x008771DB это смотрит на HookPacket
и не ясно зачем происходит смещение *HookHookSetAddr -= (0x008771DA + 5);
 

akick

letter to god
Ответ: Вопрос по С++

BYTE * HookHookJMP = (BYTE *)(0x008771DA);
*HookHookJMP = (BYTE) 0xE9; - не ясен смысл, смысл этой строчки в том что указатель HookHookJMP смотрит теперь в 0xE9 или то что было по адресу 0x008771DA теперь смотрит в 0xE9

DWORD * HookHookSetAddr = (DWORD *) (0x008771DB);
*HookHookSetAddr = (DWORD)HookPacket;
*HookHookSetAddr -= (0x008771DA + 5); - похожая ситуация, HookHookSetAddr смотирт на HookPacket или 0x008771DB это смотрит на HookPacket
и не ясно зачем происходит смещение *HookHookSetAddr -= (0x008771DA + 5);
ну для того чтобы понимать смысл прыгания по адресам памяти нужно знать какая информация там хранится а иначе это просто адреса памяти.
 

dreamer

Member
Ответ: Вопрос по С++

Код:
BYTE * HookHookJMP = (BYTE *)(0x008771DA); 
*HookHookJMP = (BYTE) 0xE9; - по адресу 0x008771DA записан байт 0xE9
DWORD * HookHookSetAddr = (DWORD *) (0x008771DB); 
*HookHookSetAddr = (DWORD)HookPacket; 
*HookHookSetAddr -= (0x008771DA + 5); - значение по адресу HookHookSetAddr равно (HookPacket - 0x008771DA - 5).
Зачем это может быть надо можно сказать только видя ВЕСЬ код
 

quant

yeah
Відповідь: Вопрос по С++

нужно подсчитать количество бит положительного числа, делаю:
1 + (int)floor( log((double)n) / log(2.) )
log(n) / log (2.) - двоичный логарифм от n
floor() - округление вниз
вроде правильно, но автоматический судья говорит, что я ошибаюсь ...
 

dreamer

Member
Ответ: Відповідь: Вопрос по С++

нужно подсчитать количество бит положительного числа, делаю:
1 + (int)floor( log((double)n) / log(2.) )
log(n) / log (2.) - двоичный логарифм от n
floor() - округление вниз
вроде правильно, но автоматический судья говорит, что я ошибаюсь ...
Почему бы не пойти простым путем?
Код:
while n > 0 do begin n := n shr 1; i := i+1 end
Операции с плавающей точкой дают погрешности, для таких целей их лучше не использовать
 

serg_pet

New Member
Ответ: Відповідь: Вопрос по С++

нужно подсчитать количество бит положительного числа, делаю:
1 + (int)floor( log((double)n) / log(2.) )
log(n) / log (2.) - двоичный логарифм от n
floor() - округление вниз
вроде правильно, но автоматический судья говорит, что я ошибаюсь ...
floor() -- не годиться. и проверь края. скорее всего автоматический судья тебя на краях валит. + проверь чтобы действительно число на входе было >0 (или бери его по модулю). И вообще -- сопровождай вопрос ссылкой на задачу :)
 

quant

yeah
Відповідь: Ответ: Вопрос по С++

получил задание написать прогу которая каталоги с подкаталогами обрабатывает (+ возможно и все файлы которые есть в подкаталогах)
я не сис програмер но могу посоветовать полигон для отработки своей структуры хранения каталогов
лично я использовал map<string, void*>

проблема - есть задача считать количество элементов массива и вывести элементы с парным индексом (индекс первого элемента 0)
пример входа :
5
5 10 3 1 0
пример выхода :
5 3 0
пытаюсь решить :
Код:
#include <cstdio>

int main () {
    int n, a, i;
    scanf ("%d", &n);
    for(i = 0; i < n; ++i) {
        scanf ("%d", &a);
        // printf ("> %d < ", i & 1);
        if (i & 1 == 0) {
            printf ("%d ", a);
        }
    }
    return 0;
}
собственно моё решение ничего не выводит !!! в чём дело ?
если розкомментировать восьмую строку видно что всё должно быть Ок
 
Зверху