
23.02.2023, 04:07
|
|
Познающий
Регистрация: 14.02.2023
Сообщений: 41
С нами:
1709244
Репутация:
13
|
|
Сообщение от Scar_
Я так понимаю что если у тебя какая-то ошибка выскочит или краш на пустом месте и тебе будет нужно искать причину чтобы это исправить. Ты попросту её не найдешь так как runtime-debug -> press F или это будет очень сложно сделать.
Для этого предусмотрены методы safe и nt_safe для LI_FN вызова, и тоже самое для LI_MODULE.
Возвращающие 0 при неправильном выполнении функции, минуя появление undefined behavior.
Сообщение от Спойлер
https://github.com/JustasMasiulis/lazy_importer/blob/master/include/lazy_importer.hpp:
Код:
struct
safe_module_enumerator
{
using
value_type
=
const
detail
::
win
::
LDR_DATA_TABLE_ENTRY_T
;
value_type
*
value
;
value_type
*
head
;
LAZY_IMPORTER_FORCEINLINE
safe_module_enumerator
(
)
noexcept
:
safe_module_enumerator
(
ldr_data_entry
(
)
)
{
}
LAZY_IMPORTER_FORCEINLINE
safe_module_enumerator
(
const
detail
::
win
::
LDR_DATA_TABLE_ENTRY_T
*
ldr
)
noexcept
:
value
(
ldr
->
load_order_next
(
)
)
,
head
(
value
)
{
}
LAZY_IMPORTER_FORCEINLINE
void
reset
(
)
noexcept
{
value
=
head
->
load_order_next
(
)
;
}
LAZY_IMPORTER_FORCEINLINE
bool
next
(
)
noexcept
{
value
=
value
->
load_order_next
(
)
;
return
value
!=
head
&&
value
->
DllBase
;
}
}
;
|
|
|