|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
||||||
Сделать отладочную DLL (изменить cdecl на stdcall) для вызова из VB29.12.2017, 14:02. Показов 5711. Ответов 77
Метки нет (Все метки)
Добрый день.
А как обнаружить свой адрес при входе в функцию какой-либо DLL-ки ? А по русски говоря: Сохранить регистр EIP. У меня пришло на ум только это (в отладчике, asm-ом не занимаюсь):
А не бывает ли на свете "ещё изящнее" решения ? И это, ... все 52 фуни (!!! МОЕЙ !!!) DLL-ки поголовно при входе в EAX содержат свою точку входа. Наверное это всё-таки "медвежья услуга" компилятора вызывающей программы ? Стоит на это надеяться ? А то мож зря процедуру "себе под нос" затеваю ? Заранее спасибо !
0
|
||||||
| 29.12.2017, 14:02 | |
|
Ответы с готовыми решениями:
77
Передача дополнительного аргумента в функцию stdcall/cdecl?
Передача структуры данных в DLL (stdcall) |
|
Эксперт Hardware
|
||||||
| 29.12.2017, 14:17 | ||||||
|
Gazzi, знак доллара возвратит текущий адрес
0
|
||||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||||||||||||||||||||||
| 29.12.2017, 22:45 | ||||||||||||||||||||||||||
|
Gazzi, давайте для начала определим – зачем это нужно?
Обычно адрес для позиционно-независимого кода (position independent code (PIC)) как раз так и получают:
call geteip не меньше 3-х).R71MT, дельта-смещение – это всё же разность адресов, т.е.:
Кто-то по ссылке R71MT написал, что при записи mov eax,$ (mov eax,offset $) будет сгенерирован фиксап. Тут надо быть аккуратным, т.к. не все ассеблеры (или не всегда) по умолчанию добавляют секцию фиксапов (даже в DLL, не говоря уже об EXE). Но если вы уверены, что она будет добавлена (в fasm это делается строкой section '.reloc' fixups data readable discardable), тогда вариант mov eax,$ (mov eax,offset $) будет самым простым и изящным ![]() Добавлено через 7 минут Для 64-битного режима можно вообще не парится и написать просто:
Именно lea, т.к. операнд mov – фактически число, а не адрес, т.е. оно будет абсолютным, а не относительным...
1
|
||||||||||||||||||||||||||
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
| 30.12.2017, 19:04 [ТС] | |
|
R71MT
А куда засовывать "Доллар", в отладчик ? Это готовая программа, а не Asm-проект. ... Дельта ... Да какая разница, как это называется. Ещё что-то есть на тему "выцепить EIP", или это единственный оператор, выцепляющий сей регистр (кроме конечно переключения задачи) ? Jin_X ... определим – зачем это нужно ... Ну так в посте "Доступ к памяти" определили. Ну давайте ещё раз определим: Имеется DLL-ка, от которой я потерял исходник. Она, зараза, написана Си-шниками, не нравится мне её выходы из фуней по Ret-у. Мне надо по RETN-у. Вот и модернизирую ... Фунуции при входе в EAX содержат свою точку входа. Ну а про это кто/што может сказать ? DLL-ка Win32, поэтому RAX не катит.
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||
| 31.12.2017, 12:00 | |||||
|
Дельта так: mov eax,[ebx+MyVar], где ebx – дельта, а если имеется готовый адрес (с фиксапами), то можно без замороча написать mov eax,[MyVar]. Или если это адрес начала, то что-то типа mov eax,[ebx+MyVar-Start], где ebx – адрес начала программу (без фиксапа).![]()
0
|
|||||
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
| 31.12.2017, 13:00 [ТС] | |
|
... Разница есть ...
В чём ? Сколько надо, столько "смещения" и прибавлю к началу файла. И совершенно по барабану, как это обзывается. ... Syscall Int ... Hу, прерывания наверное тут не нужны... А вот syscall, это что за команда, какой у неё опкод, хотелось бы узнать ? ... Ret, Retn, в чём разница? ... Стек "на место" ставит одна из них, а другая этого не делает. ... С чего это вдруг? ... Вот и я УДИВЛЯЮСЬ ! (С наступающим всех ...)
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||
| 01.01.2018, 11:01 | |||
syscall (0F 05) - это системный вызов, вызов функций ядра... используется обычно в Linux, а винде используется только внутри системных DLL.retn - это ret near, в Windows только она и используется обычно. Разница бывает, когда есть операнд или его нет. Но это не ret и retn, это ret и ret imm16 (ну или ret X можете назвать или т.п.)p.s. С новым годом!
0
|
|||
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
| 01.01.2018, 12:14 [ТС] | |
|
syscall
Ну мы всё равно с неё ничего не "выдоим" - забыли про неё. "Нормальных" больше нет для получения EIP ? RetN-ы ... Мне надо: RETN (код C3) Заменить на: RETN xx yy (код C2 yy xx) Ну и что последняя делает со стеком ?
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||||
| 01.01.2018, 21:49 | |||||||||
![]() Добавлено через 50 секунд ret N читает (E)IP из стека и затем удаляет N байт из стека. Короче, грубо говоря:
0
|
|||||||||
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
| 02.01.2018, 01:35 [ТС] | |
|
- "Нормальных" больше нет для получения EIP ?
- Нет. Тогда берём сию процедуру "на вооружение", записываем её в свою "шпаргалку", и забываем об этом. Переходим к следующему этапу: 1). Изменяем точку входа в DLL на свою, в "нашей" программной памяти в конце секции ".text". 2). Проделываем нужные процедуры. (Конкретно на данный момент): а). Заносим в "нашу" память данных в конце секции ".data" версию, например вида "DBG v1.01", а то потом запутаюсь в этих модернизируемых файлах. б). Указатель на начало всей программы вида например: 1100.0000. Он же может быть и другим (например 002E.0000), в зависимости куда DLL загрузится. На "общее" начало - это чтоб потом легче в уме смещения на всяческие "свои" фишки высчитывать, а то пишу "криворучками". 3). Отдаём управление дальше, на штатную точку входа. Как я понял с помощью JMP, видимо ничего не возвращает нам эта точка входа. Какие-нибудь "подводные камни" всплывут при этой "технологии" ? ... Ну хоть бы тогда пробел поставили ... Да что-то мне в "три оставшиеся извилины" запало, что RET - это "C3", а RETN - "C2 xx yy". Буду внимательней. ... Фунуции при входе в EAX содержат свою точку входа ... А этот "полином" так и не выяснен... Вызываю их из VB6, и из IDE и из компилированной - Всё чётко, на каждой фуне свой адрес. (???)... И в Нете ничо не обнаружил на эту тему... Просто если это "так будет всегда" и из всех программ - то и первая часть "модернизации" не нужна.
0
|
|
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
||||||||
| 02.01.2018, 22:47 | ||||||||
|
Jin X, есть еще способ:
1
|
||||||||
| 02.01.2018, 22:49 | |
|
Не по теме: Прошу прощения за оффтоп, у меня непонимание конечной цели ТС и теоретической части (моё развитие остановилось в DOS).
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
||
| 02.01.2018, 23:14 | ||
mov ax,@data, компилируется mov ax,5, например, и в relocation table добавляется адрес операнда этого mov'а. Когда программа загружается, то к 5 прибавляется PSP. Здесь работа идёт только с сегментами, смещения не меняются, они фиксированы.В Windows используется плоская модель памяти, сегменты почти не используются (разве что FS, GS, SS). Основная программа грузится по фиксированному базовому виртуальному адресу (image base, обычно 400000h), поэтому ей можно не иметь этой таблицы (там она чуть по-другому работает, но суть та же), она для него бесполезна. А вот для DLL она нужна, т.к. в одно адресное пространство грузится сразу несколько DLL, поэтому они должны иметь разный адрес. Для программы (и DLL) виртуальный адрес и есть самый настоящий, другие ему недоступны (и не нужны), несмотря на то, что физические адреса у них отличаются от виртуальных.
1
|
||
| 02.01.2018, 23:21 | ||||||||||||||
|
Не по теме:
0
|
||||||||||||||
| 03.01.2018, 00:00 | ||
|
Не по теме:
Нет, что-то ТС делает не то. Это не считая пагубного пути отказа от обновления dll производителем спектроанализатора (дал поиск по названию dll). Вот чую - что истинное решение - во внимательном чтении документации. В её принятии, а не в утверждении гордыни, что умнее производителя, и последующем "допиливании". Или в замене спектроанализатора вместе с dll. В любом случае - ТС общается на собственном "птичьем" языке и понять его непросто.
0
|
||
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
||
| 03.01.2018, 09:08 | ||
0
|
||
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
| 03.01.2018, 12:10 [ТС] | |
|
jupman
Что это за манипуляции со структурой ? Это что, меньше байт займёт чем CALL ... POP, к чему это всё ? ... должно быть известно количество аргументов для каждой функции ... Ну конечно же известно, и для каждой фуни. Описалово то любезно предоставлено. ... Добавляете в импорт свою dll ... Вот тут недопонял, поподробней можно... ... у меня непонимание конечной цели ТС ... Сделать stdcall отладочную DLL-ку. ... дизассемблированный код ... довести до компиляции masm32 и... Ну а я "ручками" "Довожу до компиляции OllyDBG и..." - зачем нужен eip ? - что бы обращаться к адресам своего шелл-кода ... Хоть один понимающий ! ... А на уровне ЯВУ разве не поддерживаются различные соглашения ? ... Вот это и можно было выяснить, какие ЯВУ какие деклы "держат", прежде чем утверждать: ... Нет, что-то ТС делает не то. Это не считая пагубного пути отказа от обновления... Какое ещё обновление, обновление чего ??? ... истинное решение - во внимательном чтении документации ... И что там будет "вычитано" применительно к данному вопросу ? Не иначе: VB быстренько (втихушку) начнёт cdecl-ы переваривать ? ... утверждении гордыни ... Где тут была какая гордыня ? ... умнее производителя, и последующем "допиливании". Или в замене спектроанализатора вместе с dll ... Огласите весь список пжлста, что мне ещё заменить, и с какими dll ? Может быть для начала тещу/жену поучить, какие щи варить ? ... общается на собственном "птичьем" языке ... Вы, уважаемый, ни одного совета не дали, ни на "птичьем", ни на каком другом. ... используем его из любого поддерживающего cdecl языка ... А зачем вообще что-то модернизировать, если она и так вызывается из языка, поддерживающего cdecl ? В конце-концов: Заданы два конкретных вопроса: 1). На какие "подводные камни" можно наткнуться, создавая свою DLLEntyPoint ? 2). Почему каждая фуня на входе в EAX содержит свой адрес ?
0
|
|
|
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
|
||||
| 03.01.2018, 14:04 | ||||
|
Сделайте просто proxy-dll на языке который поддерживает оба соглашения. Пусть она импортирует cdecl-функции из dll (от которой у вас нет исходника, но есть прототипы), а экспортирует stdcall-функции (переходники к cdecl-функциям). Ну и используйте эту proxy-dll в VB.
0
|
||||
|
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 145
|
|
| 03.01.2018, 14:36 [ТС] | |
|
... proxy-dll на языке который поддерживает оба соглашения ...
Ну во первых: У меня нет в распоряжении такого языка Во вторых: С таким же успехом я могу со стороны вызывающей программы накатать asm-вставку с "перетяжкой" RET-ов. И посыпятся такие-же подобные вопросы: А где мне взять адрес моей загруженной DLL, и тому подобное. И опять, не получу ответа... Какая разница, где ковырять, в DLL, proxy-dll или EXE. Наткнусь на те же грабли. Вот вместо proxy-dll, вставляю туда "proxy-вызовы" (если их так можно "обозвать"). Не получил ответа на два конкретных вопроса, вот в чём засада. Зато советов ...
0
|
|
|
Модератор
|
||||
| 03.01.2018, 15:24 | ||||
|
Не по теме: Ещё месяц-другой и будет ясна исходная причина возникновения темы. Затрудняюсь с оценкой нижеследующих рассуждений, но предполагаю, что VB обязан работать с cdecl. Не знаю VB, но сразу после прочтения задал поиск "поддержка vb соглашения cdecl" и ознакомился с темой на другом форуме (ссылку давать не могу - правила запрещают). Приведу цитату
Кроме этого, в теме Работа с DLL в Visual Basic (статья) нашёл Что скажите на это? Может нужно искать решение в синтаксисе VB?
0
|
||||
| 03.01.2018, 15:24 | |
|
Помогаю со студенческими работами здесь
20
Конфликт forward и stdcall в dll-библиотеке string в char* для вызова функции из dll Можно ли из ASP как-то вызвать dll, чтобы результат её (dll) работы вставился в место вызова? нужно чтобы функция располагалась до ее вызова, после ее вызова и в другом файле. Как это сделать? Не понятно, как сделать аннотации для вызова Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|