Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Нашёл проект, который есс-но обращается к стандартным dll винды. Есс-но написано на C++. Вот вопрос, как узнать какие у kernel32.dll есть функции? Есть вот функция RtlMoveMemory . У RtlMoveMemory как видно там 1 перегрузка. А в коде, который я нашёл импортируется из kernel32.dll много перегрузок функции RtlMoveMemory : Код: plaintext 1. 2. 3. 4. 5. 6. 7. Отсюда возникает вопрос. Где вообще можно было увидеть, что такие перегрузки в этой библиотеке имеются? Ведь описания нигде нет. По крайне мере, я не нашёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 21:37 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
RemarksThis function is defined as the RtlMoveMemory function. Its implementation is provided inline. For more information, see WinBase.h and Winnt.h. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 21:43 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
В Winnt.h я нашел только #if defined(_M_IX86) || defined(_M_MRX000) || defined(_M_ALPHA) #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length)) #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length)) #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length)) #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length)) #else NTSYSAPI VOID NTAPI RtlCopyMemory ( VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, DWORD Length ); NTSYSAPI VOID NTAPI RtlMoveMemory ( VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, DWORD Length ); NTSYSAPI VOID NTAPI RtlFillMemory ( VOID UNALIGNED *Destination, DWORD Length, BYTE Fill ); NTSYSAPI VOID NTAPI RtlZeroMemory ( VOID UNALIGNED *Destination, DWORD Length ); #endif И? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:08 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Что "и"? R(un-)T(ime)L(ibrary) означает, что туда не надо лезть грязными лапками. Есть заголовки и компилятор, который с этими заголовками работает - вот он и сделает всю магию, возможно, встроив некоторые вызовы в ваш код. P.S. Может, имеет смысл озвучить постановку задачи, вместо вашего понимания "правильного решения"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:13 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hoz, Win32 API написано на С, а в нем нет перегрузок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:27 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
... но никто не запрещает записать в экспорты имена, "искажённые" по известным правилам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:31 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov... но никто не запрещает записать в экспорты имена, "искажённые" по известным правилам.А может, в школу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:34 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
SiemarglА может, в школу ?Вы конкретно за Win32 API или за принципиальную возможность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:41 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovSiemarglА может, в школу ?Вы конкретно за Win32 API или за принципиальную возможность?конкретно, особенно конкретно за kernel32.dll а так есть dll export viewers в массовом варианте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:49 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Siemarglа так есть dll export viewers в массовом варианте Только нет смысла смотреть в Dependency Walker'е, потому что сишные функции однозначно идентифицируются по именам, так как не могут быть перегружены, и списка аргументов там всё равно не увидеть. В таких случаях перегрузки эмулируются макросами, и имена у функций будут совсем разными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 22:55 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
NekZSiemarglа так есть dll export viewers в массовом варианте Только нет смысла смотреть в Dependency Walker'е, потому что сишные функции однозначно идентифицируются по именам, так как не могут быть перегружены, и списка аргументов там всё равно не увидеть. В таких случаях перегрузки эмулируются макросами, и имена у функций будут совсем разными. ой, всё плюсовые ф-ции декорируются по именам экспорта. там много чего кодируется в декорировании. и не забываем про ООП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 23:05 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Siemarglплюсовые ф-ции декорируются по именам экспорта. там много чего кодируется в декорировании. и не забываем про ООП Это называется name mangling'ом. В сообществе обсуждается стандартизация ABI на всех платформах/компиляторах, что, конечно же наконец-то позволит избавиться от ещё одного бича C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2018, 23:15 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
NekZВ сообществе обсуждается стандартизация ABI на всех платформах/компиляторах Ась? Они будут убеждать MS перейти на ELF формат или наоборот? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 00:13 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Благодарю. Я только что обратил внимание на это: авторThis function is defined as the RtlMoveMemory function. Its implementation is provided inline. For more information, see WinBase.h and Winnt.h. Its implementation is provided inline означает, что реализация этой функции обеспечивается встраиванием? Как0то не читабельно.. (( Только вот не понятно, а где эти инклюдники вообще брать? Я о WinBase.h and Winnt.h Я на Java больше программирую. А на С++ мало и не на том уровне. Поиск ничего не дал толком. Я вообще не понял, как можно было догадаться до того, что бы подобное, что я изначально написал использовать. В различных вариациях использовать вызов RtlMoveMemory . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 02:25 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Цель проста. Я хочу привязать SQLite к языку, который примитивный, конечно, по сравннию в Java, C++, C# и тд, но популярный. Так вот нужно прилепить базу данных к боту, которого я пишу. я нашёл написанную реализацию, которую написал, как я понял китаец. Вот его репозиторий . А вот здесь интересующий меня момент: Код: plaintext 1. 2. Вот хочу понять, как он пришёл к такому выводу вообще. Если я обычно для реализации задачи в Java пользуюсь фреймворком или стандартными JDK, то тут не понятно откуда он черпанул инфу и влепил 2 варианта функции RtlMoveMemory, которые я не нашёл нигде. Вот мне очень хочется понять этот момент. Поэтому и написал сюда т.к. вижу, что здесь опытные программисты есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 02:34 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozТолько вот не понятно, а где эти инклюдники вообще брать? Я о WinBase.h and Winnt.h Надо скачать Windows SDK, оно свободное, оно обычно обязательно при разработке. Возможно, оно уже стоит. В Program files или в Program files (x86) есть папка Windows SDKs/Windows/v7.1/Include там эти файлы лежат. Ну или где-то рябом. Если SDK на машине не стоит, а стоит студия, и всё собирается - в папке со студией есть папка VC/Include - там поискать. hozОтсюда возникает вопрос. Где вообще можно было увидеть, что такие перегрузки в этой библиотеке имеются? Ведь описания нигде нет. По крайне мере, я не нашёл. В общем случае, как я понимаю, если нет h-файла, узнать кроме имени из таблицы импорта нельзя ничего. Дело в том, что при вызове функций код просто складывает в стек все параметры. А код функции как-то там их вытаскивает из стека и использует. Тип и порядок передаваемых параметров отслеживается компилятором при генерации кода вызывающей программы. И это как раз опирается на то, что написано в h-файле. Т.е. без h-файла узнать сигнатуру функции нельзя (только если глядя в ассемблерный код dll-ки). Если я не прав, расскажите мне, как это сделать, я буду рад :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 05:17 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovАсь? Они будут убеждать MS перейти на ELF формат или наоборот? ЕМНИП Имеются в виду единые правила манглинга имён + будущая совместимость типов std от разных компиляторов. Теперь выставление C++ интерфейсов с типами std::abi не будет чем-то позорным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 07:28 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozНашёл проект, который есс-но обращается к стандартным dll винды. Есс-но написано на C++. Вот вопрос, как узнать какие у kernel32.dll есть функции? Прочитать документацию. hozЕсть вот функция RtlMoveMemory . У RtlMoveMemory как видно там 1 перегрузка. А в коде, который я нашёл импортируется из kernel32.dll много перегрузок функции RtlMoveMemory : Windows как и многие OS написан на чистом С, в нем нет перегрузок функций. Кроме этого, API OS пишется для разных языков программирования, и в том числе для тех, где не используются перегрузки, поэтому их обычно пишут на чистом С, даже если сама OS может быть написана на С++. Поэтому, опять, там нет и не может быть перегрузок. hoz Код: plaintext 1. 2. 3. 4. 5. 6. 7. А откуда ты взял эти сигнатуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 07:58 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
NekZDimitry SibiryakovАсь? Они будут убеждать MS перейти на ELF формат или наоборот? ЕМНИП Имеются в виду единые правила манглинга имён + будущая совместимость типов std от разных компиляторов. Теперь выставление C++ интерфейсов с типами std::abi не будет чем-то позорным. Манглинг применяесят для функций С++. Функции Windows -- чистые С функции, манглинг там не применяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 08:01 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
CEMbhozТолько вот не понятно, а где эти инклюдники вообще брать? Я о WinBase.h and Winnt.h Надо скачать Windows SDK, оно свободное, оно обычно обязательно при разработке. Возможно, оно уже стоит. В Program files или в Program files (x86) есть папка Windows SDKs/Windows/v7.1/Include там эти файлы лежат. Ну или где-то рябом. Если SDK на машине не стоит, а стоит студия, и всё собирается - в папке со студией есть папка VC/Include - там поискать. hozОтсюда возникает вопрос. Где вообще можно было увидеть, что такие перегрузки в этой библиотеке имеются? Ведь описания нигде нет. По крайне мере, я не нашёл. В общем случае, как я понимаю, если нет h-файла, узнать кроме имени из таблицы импорта нельзя ничего. Дело в том, что при вызове функций код просто складывает в стек все параметры. А код функции как-то там их вытаскивает из стека и использует. Тип и порядок передаваемых параметров отслеживается компилятором при генерации кода вызывающей программы. И это как раз опирается на то, что написано в h-файле. Т.е. без h-файла узнать сигнатуру функции нельзя (только если глядя в ассемблерный код dll-ки). Если я не прав, расскажите мне, как это сделать, я буду рад :) Вот всё правильно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 08:02 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozЕсть вот функция RtlMoveMemory . Если ты не заметил маленький нюанс, хочу обратить на него внимание. Ты говоришь про функцию RtlMoveMemory , а ссылаешься на документацию по функции MoveMemory . Ты не заметил небольшую разницу в их названии? Это разные функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 08:06 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
MasterZivМанглинг применяесят для функций С++. Функции Windows -- чистые С функции, манглинг там не применяется. Это уже 100 раз сказали выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 09:31 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
hozА вот здесь интересующий меня момент: Код: plaintext 1. 2. Вот хочу понять, как он пришёл к такому выводу вообще.Насколько я понимаю, это фишка конкретно mql - один и тот же экспорт импортирован с двумя разными сигнатурами для удобства использования. Вы трейдер - вам и разбираться, но к плюсам никак не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 09:34 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
В таблице экспорта присутствует лишь одна функция RtlMoveMemory и именно она используется для всех этих перегрузок с разными типами. Если внимательно приглядеться, к перегрузкам, то можно заметить, что они представляют из себя перегрузки с разными типами одной и той же функции, которая перемещает количество байт (length): Код: plaintext 1. Иными словами, все эти перегрузки сделаны для удобства написания и восприятия кода. Ничто не мешает сделать свою собственную перегрузку - со своими типами, чтобы не загромождать свой код приведением типов при вызове RtlMoveMemory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 11:01 |
|
||
|
Как узнать какие перегрузки есть у dll ?
|
|||
|---|---|---|---|
|
#18+
MasterZivА откуда ты взял эти сигнатуры? Так вот же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:51 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=18&tid=2017828]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 272ms |
| total: | 420ms |

| 0 / 0 |
