DLL и mySQL

Тема в разделе "WASM.BEGINNERS", создана пользователем Kamikaze, 15 июл 2005.

Статус темы:
Закрыта.
  1. Kamikaze

    Kamikaze New Member

    Публикаций:
    0
    Регистрация:
    30 май 2005
    Сообщения:
    13
    Адрес:
    Ukraine
    Задача: имеется сервер из нескольких программ (сервисов), работающий с mySQL. Все запросы выполняются к стандартной libmysql.dll через "коммутирующую" библиотеку сервера mysql.dll. Требуется врезаться в mysql.dll для передачи управления обработки запросов своей DLL:



    Вариант-A:

    {Server} --> mysql.dll --> new.dll --> libmysql.dll



    или Вариант-B:

    {Server} --> mysql.dll --> new.dll --> mysql.dll --> libmysql.dll



    mysql.dll вызывает функции:

    mysql_affected_rows @29

    mysql_close @32

    mysql_errno @41

    mysql_fetch_lengths @47

    mysql_fetch_row @48

    mysql_free_result @52

    mysql_init @60

    mysql_insert_id @61

    mysql_real_connect @77

    mysql_real_escape_string @78

    mysql_real_query @79

    mysql_store_result @94



    Простое решение по варианту-A, типа пробросить все 12 функций к libmysql.dll не срабатывает из-за того, что вызов mysql_real_query приводит к следующему вызову mysql_read_query_result и т.д. Получается стандартная тупиковая ситуация, когда и новая DLL отдельно выполняет тесты всех функций, и сервер стартует нормально, но клиентская программа к серверу не коннектится.

    Делаю попытку пройти по варианту-B.

    В mysql.dll к трем DLL из IAT (KERNEL32.dll, libapr.dll и LIBMYSQL.dll):

    Old:

    00005000: CA 57 00 00-96 59 00 00-84 59 00 00-72 59 00 00 KERNEL32.dll

    00005010: 62 59 00 00-52 59 00 00-3C 59 00 00-2C 59 00 00

    00005020: 1A 59 00 00-0E 59 00 00-04 59 00 00-F8 58 00 00

    00005030: EA 58 00 00-DA 58 00 00-CE 58 00 00-B2 58 00 00

    00005040: 08 57 00 00-1A 57 00 00-28 57 00 00-34 57 00 00

    00005050: 40 57 00 00-4E 57 00 00-62 57 00 00-76 57 00 00

    00005060: 8A 57 00 00-A0 57 00 00-BA 57 00 00-D8 57 00 00

    00005070: E6 57 00 00-F4 57 00 00-06 58 00 00-16 58 00 00

    00005080: 24 58 00 00-36 58 00 00-50 58 00 00-6A 58 00 00

    00005090: 80 58 00 00-98 58 00 00-00 00 00 00-E4 56 00 00 LIBMYSQL.dll

    000050A0: CE 56 00 00-BC 56 00 00-A8 56 00 00-8C 56 00 00

    000050B0: 7E 56 00 00-68 56 00 00-5A 56 00 00-4C 56 00 00

    000050C0: 36 56 00 00-24 56 00 00-10 56 00 00-00 00 00 00

    000050D0: F4 55 00 00-E4 55 00 00-C4 55 00 00-00 00 00 00 libapr.dll

    добавляем функцию linqdsql из новой DLL - libmxsql.dll.

    Для этого (т.к. размер IAT менять проблематично) вырезаем из нее mysql_errno и mysql_close:

    New:

    00005000: CA 57 00 00-96 59 00 00-84 59 00 00-72 59 00 00 KERNEL32.dll

    00005010: 62 59 00 00-52 59 00 00-3C 59 00 00-2C 59 00 00

    00005020: 1A 59 00 00-0E 59 00 00-04 59 00 00-F8 58 00 00

    00005030: EA 58 00 00-DA 58 00 00-CE 58 00 00-B2 58 00 00

    00005040: 08 57 00 00-1A 57 00 00-28 57 00 00-34 57 00 00

    00005050: 40 57 00 00-4E 57 00 00-62 57 00 00-76 57 00 00

    00005060: 8A 57 00 00-A0 57 00 00-BA 57 00 00-D8 57 00 00

    00005070: E6 57 00 00-F4 57 00 00-06 58 00 00-16 58 00 00

    00005080: 24 58 00 00-36 58 00 00-50 58 00 00-6A 58 00 00

    00005090: 80 58 00 00-98 58 00 00-00 00 00 00-E4 59 00 00 libapr.dll

    000050A0: D4 59 00 00-B4 59 00 00-00 00 00 00-E4 56 00 00 LIBMYSQL.dll

    000050B0: CE 56 00 00-BC 56 00 00-A8 56 00 00-8C 56 00 00

    000050C0: 7E 56 00 00-68 56 00 00-36 56 00 00-24 56 00 00

    000050D0: 10 56 00 00-00 00 00 00-F6 55 00 00-00 00 00 00 LIBMXSQL.dll

    Для недостающего свободного место смещаем секцию Export (libapr.dll и LIBMYSQL.dll меняются местами для облегчения последующей правки):

    Old:

    000059B0: 00 00 00 00-5F 3D 51 42-00 00 00 00-E2 59 00 00 _=QB тY

    000059C0: 01 00 00 00-01 00 00 00-01 00 00 00-D8 59 00 00    ╪Y

    000059D0: DC 59 00 00-E0 59 00 00-E0 11 00 00-EC 59 00 00 ▄Y рY р ьY

    000059E0: 00 00 6D 79-73 71 6C 2E-64 6C 6C 00-63 72 65 61 mysql.dll crea

    000059F0: 74 65 4F 62-6A 65 63 74-00 00 00 00-00 00 00 00 teObject

    New:

    000059B0: 00 00 00 00-CA 00 5F 61-70 72 5F 70-6F 6F 6C 5F ╩ _apr_pool_

    000059C0: 63 6C 65 61-6E 75 70 5F-72 65 67 69-73 74 65 72 cleanup_register

    000059D0: 40 31 36 00-12 01 5F 61-70 72 5F 73-6C 65 65 70 @16 _apr_sleep

    000059E0: 40 38 00 00-B1 00 5F 61-70 72 5F 70-61 6C 6C 6F @8 ▒ _apr_pallo

    000059F0: 63 40 38 00-6C 69 62 61-70 72 2E 64-6C 6C 00 00 c@8 libapr.dll

    00005A00: 00 00 00 00-5F 3D 51 42-00 00 00 00-32 5A 00 00 _=QB 2Z

    00005A10: 01 00 00 00-01 00 00 00-01 00 00 00-28 5A 00 00    (Z

    00005A20: 2C 5A 00 00-30 5A 00 00-E0 11 00 00-3C 5A 00 00 ,Z 0Z р <Z

    00005A30: 00 00 6D 79-73 71 6C 2E-64 6C 6C 00-63 72 65 61 mysql.dll crea

    00005A40: 74 65 4F 62-6A 65 63 74-00 00 00 00-00 00 00 00 teObject

    Соответственно изменяю остальные таблицы:

    Old:

    000054A0: 04 56 00 00-D0 50 00 00-80 55 00 00-00 00 00 00 V ╨P АU

    000054B0: 00 00 00 00-FA 56 00 00-9C 50 00 00-E4 54 00 00 ·V ЬP фT

    000054C0: 00 00 00 00-00 00 00 00-A2 59 00 00-00 50 00 00 вY P

    000054D0: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00

    New:

    000054A0: F4 59 00 00-9C 50 00 00-B0 55 00 00-00 00 00 00 ЇY ЬP ░U

    000054B0: 00 00 00 00-FA 56 00 00-AC 50 00 00-04 55 00 00 ·V мP U

    000054C0: 00 00 00 00-00 00 00 00-A2 59 00 00-00 50 00 00 вY P

    000054D0: DC 55 00 00-00 00 00 00-00 00 00 00-02 56 00 00 ▄U V

    000054E0: D8 50 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ╪P

    000054F0: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00

    Old:

    000054E0: 00 00 00 00-CA 57 00 00-96 59 00 00-84 59 00 00 ╩W ЦY ДY

    000054F0: 72 59 00 00-62 59 00 00-52 59 00 00-3C 59 00 00 rY bY RY <Y

    00005500: 2C 59 00 00-1A 59 00 00-0E 59 00 00-04 59 00 00 ,Y Y Y Y

    00005510: F8 58 00 00-EA 58 00 00-DA 58 00 00-CE 58 00 00 °X ъX ┌X ╬X

    00005520: B2 58 00 00-08 57 00 00-1A 57 00 00-28 57 00 00 ▓X W W (W

    00005530: 34 57 00 00-40 57 00 00-4E 57 00 00-62 57 00 00 4W @W NW bW

    00005540: 76 57 00 00-8A 57 00 00-A0 57 00 00-BA 57 00 00 vW КW аW ║W

    00005550: D8 57 00 00-E6 57 00 00-F4 57 00 00-06 58 00 00 ╪W цW ЇW X

    00005560: 16 58 00 00-24 58 00 00-36 58 00 00-50 58 00 00 X $X 6X PX

    00005570: 6A 58 00 00-80 58 00 00-98 58 00 00-00 00 00 00 jX АX ШX

    00005580: E4 56 00 00-CE 56 00 00-BC 56 00 00-A8 56 00 00 фV ╬V ╝V иV

    00005590: 8C 56 00 00-7E 56 00 00-68 56 00 00-5A 56 00 00 МV ~V hV ZV

    000055A0: 4C 56 00 00-36 56 00 00-24 56 00 00-10 56 00 00 LV 6V $V V

    000055B0: 00 00 00 00-F4 55 00 00-E4 55 00 00-C4 55 00 00 ЇU фU ─U

    New:

    00005500: 00 00 00 00-CA 57 00 00-96 59 00 00-84 59 00 00 ╩W ЦY ДY

    00005510: 72 59 00 00-62 59 00 00-52 59 00 00-3C 59 00 00 rY bY RY <Y

    00005520: 2C 59 00 00-1A 59 00 00-0E 59 00 00-04 59 00 00 ,Y Y Y Y

    00005530: F8 58 00 00-EA 58 00 00-DA 58 00 00-CE 58 00 00 °X ъX ┌X ╬X

    00005540: B2 58 00 00-08 57 00 00-1A 57 00 00-28 57 00 00 ▓X W W (W

    00005550: 34 57 00 00-40 57 00 00-4E 57 00 00-62 57 00 00 4W @W NW bW

    00005560: 76 57 00 00-8A 57 00 00-A0 57 00 00-BA 57 00 00 vW КW аW ║W

    00005570: D8 57 00 00-E6 57 00 00-F4 57 00 00-06 58 00 00 ╪W цW ЇW X

    00005580: 16 58 00 00-24 58 00 00-36 58 00 00-50 58 00 00 X $X 6X PX

    00005590: 6A 58 00 00-80 58 00 00-98 58 00 00-00 00 00 00 jX АX ШX

    000055A0: E4 59 00 00-D4 59 00 00-B4 59 00 00-00 00 00 00 фY ╘Y ┤Y

    000055B0: E4 56 00 00-CE 56 00 00-BC 56 00 00-A8 56 00 00 фV ╬V ╝V иV

    000055C0: 8C 56 00 00-7E 56 00 00-68 56 00 00-36 56 00 00 МV ~V hV 6V

    000055D0: 24 56 00 00-10 56 00 00-00 00 00 00-F6 55 00 00 $V V ЎU

    000055E0: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00

    Old:

    000055C0: 00 00 00 00-CA 00 5F 61-70 72 5F 70-6F 6F 6C 5F ╩ _apr_pool_

    000055D0: 63 6C 65 61-6E 75 70 5F-72 65 67 69-73 74 65 72 cleanup_register

    000055E0: 40 31 36 00-12 01 5F 61-70 72 5F 73-6C 65 65 70 @16 _apr_sleep

    000055F0: 40 38 00 00-B1 00 5F 61-70 72 5F 70-61 6C 6C 6F @8 ▒ _apr_pallo

    00005600: 63 40 38 00-6C 69 62 61-70 72 2E 64-6C 6C 00 00 c@8 libapr.dll <--Уходит в район секции Export



    00005610: 36 00 6D 79-73 71 6C 5F-66 72 65 65-5F 72 65 73 6 mysql_free_res

    00005620: 75 6C 74 00-32 00 6D 79-73 71 6C 5F-66 65 74 63 ult 2 mysql_fetc

    00005630: 68 5F 72 6F-77 00 31 00-6D 79 73 71-6C 5F 66 65 h_row 1 mysql_fe

    00005640: 74 63 68 5F-6C 65 6E 67-74 68 73 00-22 00 6D 79 tch_lengths " my

    00005650: 73 71 6C 5F-63 6C 6F 73-65 00 2B 00-6D 79 73 71 sql_close + mysq

    00005660: 6C 5F 65 72-72 6E 6F 00-4D 00 6D 79-73 71 6C 5F l_errno M mysql_

    00005670: 72 65 61 6C-5F 63 6F 6E-6E 65 63 74-00 00 3C 00 real_connect <

    00005680: 6D 79 73 71-6C 5F 69 6E-69 74 00 00-4E 00 6D 79 mysql_init N my

    00005690: 73 71 6C 5F-72 65 61 6C-5F 65 73 63-61 70 65 5F sql_real_escape_

    000056A0: 73 74 72 69-6E 67 00 00-4F 00 6D 79-73 71 6C 5F string O mysql_

    000056B0: 72 65 61 6C-5F 71 75 65-72 79 00 00-3D 00 6D 79 real_query = my

    000056C0: 73 71 6C 5F-69 6E 73 65-72 74 5F 69-64 00 1F 00 sql_insert_id 

    000056D0: 6D 79 73 71-6C 5F 61 66-66 65 63 74-65 64 5F 72 mysql_affected_r

    000056E0: 6F 77 73 00-5E 00 6D 79-73 71 6C 5F-73 74 6F 72 ows ^ mysql_stor

    000056F0: 65 5F 72 65-73 75 6C 74-00 00 4C 49-42 4D 59 53 e_result LIBMYS

    00005700: 51 4C 2E 64-6C 6C 00 00-FD 00 47 65-74 43 6F 6D QL.dll ¤ GetCom

    New:

    000055F0: 00 00 00 00-00 00 01 00-6C 69 6E 71-64 73 71 6C  linqdsql

    00005600: 00 00 4C 49-42 4D 58 53-51 4C 2E 64-6C 6C 00 00 LIBMXSQL.dll

    00005610: 36 00 6D 79-73 71 6C 5F-66 72 65 65-5F 72 65 73 6 mysql_free_res

    00005620: 75 6C 74 00-32 00 6D 79-73 71 6C 5F-66 65 74 63 ult 2 mysql_fetc

    00005630: 68 5F 72 6F-77 00 31 00-6D 79 73 71-6C 5F 66 65 h_row 1 mysql_fe

    00005640: 74 63 68 5F-6C 65 6E 67-74 68 73 00-22 00 6D 79 tch_lengths " my

    00005650: 73 71 6C 5F-63 6C 6F 73-65 00 2B 00-6D 79 73 71 sql_close + mysq

    00005660: 6C 5F 65 72-72 6E 6F 00-4D 00 6D 79-73 71 6C 5F l_errno M mysql_

    00005670: 72 65 61 6C-5F 63 6F 6E-6E 65 63 74-00 00 3C 00 real_connect <

    00005680: 6D 79 73 71-6C 5F 69 6E-69 74 00 00-4E 00 6D 79 mysql_init N my

    00005690: 73 71 6C 5F-72 65 61 6C-5F 65 73 63-61 70 65 5F sql_real_escape_

    000056A0: 73 74 72 69-6E 67 00 00-4F 00 6D 79-73 71 6C 5F string O mysql_

    000056B0: 72 65 61 6C-5F 71 75 65-72 79 00 00-3D 00 6D 79 real_query = my

    000056C0: 73 71 6C 5F-69 6E 73 65-72 74 5F 69-64 00 1F 00 sql_insert_id 

    000056D0: 6D 79 73 71-6C 5F 61 66-66 65 63 74-65 64 5F 72 mysql_affected_r

    000056E0: 6F 77 73 00-5E 00 6D 79-73 71 6C 5F-73 74 6F 72 ows ^ mysql_stor

    000056F0: 65 5F 72 65-73 75 6C 74-00 00 4C 49-42 4D 59 53 e_result LIBMYS

    00005700: 51 4C 2E 64-6C 6C 00 00-FD 00 47 65-74 43 6F 6D QL.dll ¤ GetCom



    За IAT стоит список адресов процедур из mysql.dll (что это вообще такое???) и не дающий исправить ее размер.

    Правим его для организации свободного места в процедурах:

    Old:

    000050E0: 40 10 00 10-50 10 00 10-70 10 00 10-C0 10 00 10 @ P p └ 

    000050F0: 40 11 00 10-60 11 00 10-A0 11 00 10-80 11 00 10 @ ` а А 

    00005100: 90 11 00 10-80 10 00 10

    New:

    000050E0: 3D 10 00 10-50 10 00 10-70 10 00 10-C0 10 00 10 = P p └ 

    000050F0: 40 11 00 10-5D 11 00 10-A0 11 00 10-8C 11 00 10 @ ] а М 

    00005100: 96 11 00 10-80 10 00 10



    Исправляем вызовы:

    Old:

    10001200 $-FF25 D8500010 JMP DWORD PTR DS:[<&libapr._apr_pool_cle>; libapr._apr_pool_cleanup_register@16

    10001206 $-FF25 D4500010 JMP DWORD PTR DS:[<&libapr._apr_sleep@8>>; libapr._apr_sleep@8

    1000120C $-FF25 D0500010 JMP DWORD PTR DS:[<&libapr._apr_palloc@8>; libapr._apr_palloc@8

    10001212 $-FF25 C8500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_free_>; LIBMYSQL.mysql_free_result

    10001218 $-FF25 C4500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_fetch>; LIBMYSQL.mysql_fetch_row

    1000121E $-FF25 C0500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_fetch>; LIBMYSQL.mysql_fetch_lengths

    10001224 $-FF25 BC500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_close>; LIBMYSQL.mysql_close

    1000122A $-FF25 B8500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_errno>; LIBMYSQL.mysql_errno

    10001230 $-FF25 B4500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_real_>; LIBMYSQL.mysql_real_connect

    10001236 $-FF25 B0500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_init>>; LIBMYSQL.mysql_init

    1000123C $-FF25 AC500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_real_>; LIBMYSQL.mysql_real_escape_string

    10001242 $-FF25 A8500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_real_>; LIBMYSQL.mysql_real_query

    10001248 $-FF25 A4500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_inser>; LIBMYSQL.mysql_insert_id

    1000124E $-FF25 A0500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_affec>; LIBMYSQL.mysql_affected_rows

    10001254 $-FF25 9C500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_store>; LIBMYSQL.mysql_store_result

    New:

    10001200 $-FF25 A4500010 JMP DWORD PTR DS:[<&libapr._apr_pool_cle>; libapr._apr_pool_cleanup_register@16

    10001206 $-FF25 A0500010 JMP DWORD PTR DS:[<&libapr._apr_sleep@8>>; libapr._apr_sleep@8

    1000120C $-FF25 9C500010 JMP DWORD PTR DS:[<&libapr._apr_palloc@8>; libapr._apr_palloc@8

    10001212 $-FF25 D0500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_free_>; LIBMYSQL.mysql_free_result

    10001218 $-FF25 CC500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_fetch>; LIBMYSQL.mysql_fetch_row

    1000121E $-FF25 C8500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_fetch>; LIBMYSQL.mysql_fetch_lengths

    10001224 $-FF25 D8500010 JMP DWORD PTR DS:[<&LIBMXSQL.linqdsql>] ; LIBMXSQL.linqdsql

    1000122A $-FF25 D8500010 JMP DWORD PTR DS:[<&LIBMXSQL.linqdsql>] ; LIBMXSQL.linqdsql

    10001230 $-FF25 C4500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_real_>; LIBMYSQL.mysql_real_connect

    10001236 $-FF25 C0500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_init>>; LIBMYSQL.mysql_init

    1000123C $-FF25 BC500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_real_>; LIBMYSQL.mysql_real_escape_string

    10001242 $-FF25 B8500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_real_>; LIBMYSQL.mysql_real_query

    10001248 $-FF25 B4500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_inser>; LIBMYSQL.mysql_insert_id

    1000124E $-FF25 B0500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_affec>; LIBMYSQL.mysql_affected_rows

    10001254 $-FF25 AC500010 JMP DWORD PTR DS:[<&LIBMYSQL.mysql_store>; LIBMYSQL.mysql_store_result



    И, наконец, правим вызов из процедуры mysql.dll функции из libmysql.dll:

    Old:

    10001160 . 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]

    10001164 . 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]

    10001168 . 50 PUSH EAX

    10001169 . 8B41 04 MOV EAX,DWORD PTR DS:[ECX+4]

    1000116C . 52 PUSH EDX

    1000116D . 50 PUSH EAX

    1000116E . E8 CF000000 CALL <JMP.&LIBMYSQL.mysql_real_query>

    10001173 . 85C0 TEST EAX,EAX

    10001175 . 0F94C0 SETE AL

    10001178 . C2 0800 RETN 8

    New:

    1000115B 90 NOP

    1000115C 90 NOP

    1000115D . 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]

    10001161 . 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]

    10001165 . 50 PUSH EAX

    10001166 . 8B41 04 MOV EAX,DWORD PTR DS:[ECX+4]

    10001169 . 52 PUSH EDX

    1000116A . 50 PUSH EAX

    1000116B . E8 D2000000 CALL <JMP.&LIBMYSQL.mysql_real_query>

    10001170 . 85C0 TEST EAX,EAX

    10001172 . 0F94C0 SETE AL

    10001175 . 60 PUSHAD

    10001176 . EB 07 JMP SHORT mysql.1000117F

    10001178 > 61 POPAD

    10001179 . 90 NOP

    1000117A . 90 NOP

    1000117B . 90 NOP

    1000117C . C2 0800 RETN 8

    1000117F > 90 NOP

    10001180 . 90 NOP

    10001181 . E8 9E000000 CALL <JMP.&LIBMXSQL.linqdsql>

    10001186 .^EB F0 JMP SHORT mysql.10001178



    И... стандартная тупиковая ситуация - сервер стартует нормально, но клиент к серверу не коннектится.

    Что делать? Написать свою DLL, пусть даже частично эмулирующую LIBMYSQL.dll? Нереально!

    Что происходит? Меняются регистры/стек после вызова "своей" функции? Или просто новая DLL работает "не правильно"?



    HELP!!!



    PS. Действующие лица (их можно взять из http://tor.net.ua/files/ ):

    linqd-3.1.12-setup.exe - тот самый сервер

    mysql.dll - библиотека сервера для работы с mySQL (исправленная)

    old_mysql.dll - то же, но оригинальная

    libapr.dll - служебная библиотека сервера

    libmxsql.dll - "новая" DLL

    libmySQL.dll - размера 249856K от mySQL 4.0.16
     
  2. Kamikaze

    Kamikaze New Member

    Публикаций:
    0
    Регистрация:
    30 май 2005
    Сообщения:
    13
    Адрес:
    Ukraine
    :dntknw: Понял...

    Упростим вопрос:

    1000115B 90 NOP

    1000115C 90 NOP

    1000115D 90 NOP

    1000115E 90 NOP

    1000115F 90 NOP

    10001160 90 NOP

    10001161 90 NOP

    10001162 90 NOP

    10001163 90 NOP

    10001164 90 NOP

    10001165 90 NOP

    10001166 90 NOP

    10001167 . 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]

    1000116B . 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]

    1000116F . 50 PUSH EAX

    10001170 . 8B41 04 MOV EAX,DWORD PTR DS:[ECX+4]

    10001173 . 52 PUSH EDX

    10001174 . 50 PUSH EAX

    10001175 . E8 C8000000 CALL <JMP.&LIBMYSQL.mysql_real_query>

    1000117A . 85C0 TEST EAX,EAX

    1000117C . 0F94C0 SETE AL

    1000117F . 90 NOP

    10001180 . 90 NOP

    10001181 . 90 NOP

    10001182 . 90 NOP

    10001183 . 90 NOP

    10001184 . 90 NOP

    10001185 . 90 NOP

    10001186 . 90 NOP

    10001187 . 90 NOP

    10001188 . 90 NOP

    10001189 . C2 0800 RETN 8



    Как ^^^сюда^^^ вставить вызов своей функции, чтобы сохранить работоспособноть оригинального кода?
     
  3. Kamikaze

    Kamikaze New Member

    Публикаций:
    0
    Регистрация:
    30 май 2005
    Сообщения:
    13
    Адрес:
    Ukraine
    :dntknw:(( Ну ладна...

    Там все равно еще проблема с сишным соглашением о связях...

    Начнем опять с начала.
     
Статус темы:
Закрыта.