небольшая проблемка с адрессом

Тема в разделе "WASM.BEGINNERS", создана пользователем spa, 2 ноя 2006.

  1. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Код (Text):
    1. struct far_jmp
    2. {
    3. BYTE PuhsOp;
    4. PVOID PushArg;
    5. BYTE RetOp;
    6. };
    7. JmpZwq.PuhsOp = 0x68; //push
    8. JmpZwq.PushArg = (PROC)&MessageBoxA_;
    9. JmpZwq.RetOp = 0xC3; //ret
    10.  
    11. WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, &JmpZwq, sizeof(far_jmp),&dwBytes);
    То есть как Вы уже догадались пишу
    push псевдо адресс мессджбокса
    ret

    Но после WriteProcessMemory, в памяти оказываеться не то что надо(естесно прога падает).
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Код (Text):
    1. #pragma pack(push, 1)
    2. struct far_jmp
    3. {
    4. BYTE PuhsOp;
    5. PVOID PushArg;
    6. BYTE RetOp;
    7. };
    8. #pragma pack(pop)
    ------
    а что там оказывается? Дамп памяти покажи.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    rmn
    скорее всего твой код исправит положение =)
     
  4. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    А можно узнать что этот код делает, а то мне какбы главное понять...
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    SPA
    Поля в структуре обычно выравниваются по границе sizeof(поле). То есть твоя структур преобразиться в
    Код (Text):
    1. struct far_jmp
    2. {
    3. BYTE PuhsOp;
    4. BYTE Padding1[3];
    5. PVOID PushArg;
    6. BYTE RetOp;
    7. };
    #pragma pack(push, 1) - говорит, что надо выравнивать по границе в 1 байт.
    #pragma pack(pop) - возвращает всё на свои места.