nativApi

Тема в разделе "WASM.BEGINNERS", создана пользователем readme, 13 авг 2005.

  1. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    решил поэкперементировать взял SendMessage да там и команд немного скопировал что там есть к себе

    первоначально он такой
    Код (Text):
    1. ;-------исходный
    2.   MOV EDI,EDI
    3.   PUSH EBP
    4.   MOV EBP,ESP
    5.   PUSH ESI
    6.   MOV ESI,DWORD PTR SS:[EBP+C]
    7.   TEST ESI,FFFE0000
    8.   JNZ user32.77D6117E
    9.   MOV ECX,DWORD PTR SS:[EBP+8]
    10.   CMP ECX,-1
    11.   JE user32.77D5DA92
    12.   CMP ECX,0FFFF
    13.   JE user32.77D5DA92
    14.   CALL user32.77D38490
    15.   TEST EAX,EAX
    16.   JE user32.77D5DA8B
    17.   PUSH 1
    18.   PUSH DWORD PTR SS:[EBP+14]
    19.   PUSH DWORD PTR SS:[EBP+10]
    20.   PUSH ESI
    21.   PUSH EAX
    22.   CALL user32.77D3B67B
    23.   POP ESI
    24.   POP EBP
    25.   RETN 10
    26. ;-------исходный
    27. переделал на такой
    28. gettext proc ;hwnd:DWORD,message:DWORD,dlinna:DWORD,offset_:DWORD
    29.   MOV EDI,EDI
    30.   PUSH EBP
    31.   MOV EBP,ESP
    32.   PUSH ESI
    33.   MOV ESI,DWORD PTR SS:[EBP+0Ch]
    34.   TEST ESI,0FFFE0000h
    35. ;------------1
    36.   ;JNZ 077D6117Eh;user32.77D6117E
    37.   jnz next1
    38.   jmp next1_
    39. next1:
    40.   push 077D6117Eh
    41.   ret
    42. next1_:
    43. ;------------1
    44.   MOV ECX,DWORD PTR SS:[EBP+8]
    45.   CMP ECX,-1
    46. ;------------2
    47.   ;JE 077D5DA92h;user32.77D5DA92
    48.   je next2
    49.   jmp next2_
    50. next2:
    51.   push 077D5DA92h
    52.   ret
    53. next2_:
    54. ;------------2
    55.   CMP ECX,0FFFFh
    56. ;------------3
    57.   ;JE 077D5DA92h;user32.77D5DA92
    58.   je next3
    59.   jmp next3_
    60. next3:
    61.   push 077D5DA92h
    62.   ret
    63. next3_:
    64. ;------------3
    65. ;------*-*-*-*4
    66.   ;CALL 077D38490h;user32.77D38490
    67.   mov eax,077D38490h
    68.   call eax
    69. ;------*-*-*-*4
    70.   TEST EAX,EAX
    71. ;------------5
    72.   ;JE 077D5DA8Bh;user32.77D5DA8B
    73.   je next4
    74.   jmp next4_
    75. next4:
    76.   push 077D5DA8Bh
    77.   ret
    78. next4_:
    79. ;------------5
    80.   PUSH 1
    81.   PUSH DWORD PTR SS:[EBP+14]
    82.   PUSH DWORD PTR SS:[EBP+10]
    83.   PUSH ESI
    84.   PUSH EAX
    85. ;----------6
    86.   ;CALL 077D3B67Bh ;user32.77D3B67B
    87.   mov eax,077D3B67Bh
    88.   call eax
    89. ;----------6
    90.   POP ESI
    91.   POP EBP
    92.  
    93.     ret 10
    94. gettext endp


    вроде переделал так что от аригинала не должен отличаться

    вызываю так
    Код (Text):
    1.   push offset ascicod
    2.   push 10
    3.   push 0dh;WM_GETTEXT
    4.   push hwnd
    5.   call gettext


    к примеру если вызвать с хандэлм нулевым то нет ошибок, а если с теми пораметрами как должна быть то выскакивает ошибка непойму в чём проблема
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    readme

    Возможно потому что в твоем коде не у всех цифр стоят h, например, перед решающим вызовом
    Код (Text):
    1. ...
    2. PUSH 1
    3. PUSH DWORD PTR SS:[EBP+14] ;; !!!
    4. PUSH DWORD PTR SS:[EBP+10] ;; !!!
    5. PUSH ESI
    6. PUSH EAX
    7. ;----------6
    8. ;CALL 077D3B67Bh ;user32.77D3B67B
    9. mov eax,077D3B67Bh
    10. call eax
    11. ...
    и при возврате
    Код (Text):
    1. ...
    2. POP EBP
    3.  
    4. ret 10 ;; !!!
    5. gettext endp
    6. ...
     
  3. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    спасибо зароботало)
     
  4. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    а вот непонятно почему такая команда как call 077D38490h у компилятора вызывает ошибку?

    может можно как то обойти?
     
  5. riban

    riban New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2005
    Сообщения:
    51
    Адрес:
    Russia
    077D38490 - 9 знаков. 0 обычно ставится перед буквой.
     
  6. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    хм..ксожелению чтот неполучается хоть сколько знаков
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    readme

    Afaik нет команды call imm8/imm16/imm32.
     
  8. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    q_q

    как это нет? А переход на метку как осуществляется?

    другое дело MASM так задать не позволяет.

    Задай кодом: db 0E8h, 90h, 84h, 0D3h, 77h

    Только этот адрес 077D38490h может быть разный при загрузке системы- Винда DLL user32 может ведь в другое место подгрузить.
     
  9. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    yureckor Нету, переход идет через смещение (расстояние от текущего адреса инструкции call до требуемого 0x77d38490), в фасме как-то так можно задавать
    Код (Text):
    1. ;=======================================================
    2. format      pe gui at imagebase
    3. ;=======================================================
    4. imagebase   =       0x00400000
    5. ;=======================================================
    6.             call    $ + (0x77d38490 - imagebase - rva $)
    7. ;=======================================================
    а винда (nt так точно) user32 (системные dll) в другое место не загрузит, разный адрес будет в разных build'ах
     
  10. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    bogrus

    цитаты из IntelQuickreference:

    E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction

    EA cp JMP ptr16:32 Jump far, absolute, address given in operand
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    А если немного по-другому выделить:

    EA cp JMP ptr16:32 Jump far, absolute, address given in operand
     
  12. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    ну ### intel, я даже и не думал.
     
  13. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    yureckor

    другое дело MASM так задать не позволяет

    Если _очень_ надо, то можно так
    Код (Text):
    1. ...
    2.     mov ax,cs
    3.     mov ll,ax
    4.     jmp short @F
    5. @@:
    6.     db  09Ah        ; call ptr16:32
    7.     dd  077D38490h
    8. ll  dw  0
    9. ...


    Только этот адрес 077D38490h может быть разный

    Это совсем другая история, я вообще не понимаю затеи readme.
     
  14. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    то что call на смещение переходит я тогда тоже в отладчике убедился,

    впринципе устраивает и

    mov eax,**

    call eax

    присто думал что можно с фиксированным адресом тоже