Anonymous
https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-list_entry
Anonymous
как получить доступ к эллементу
Anonymous
тут нету VALUE
Anonymous
https://docs.microsoft.com/en-gb/windows/win32/api/winternl/ns-winternl-peb_ldr_data
Anonymous
LIST_ENTRY где тут value ?
Anonymous
как извлечь значение
Anonymous
?
s54820
как извлечь значение
У тебя по ссылке есть LDR_DATA_TABLE_ENTRY, это и есть значение. Указатели в LIST_ENTRY указывают не на начало LDR_DATA_TABLE_ENTRY, а на соответствующий элемент LIST_ENTRY в этой структуре (там кроме InMemoryOrderLinks есть и другие, просто Microsoft не хочет их докуметировать). Чтобы получить указатель на всю структуру из указателя на элемент, нужно вычесть из указателя на элемент его офсет в структуре. Для Си у Microsoft есть макрос CONTAINING_RECORD, в ассемблере ты просто вычтешь 8 или 16, в зависимости от разрядности.
Eugene
😂 ?
Ну ты подумай логически. Если игроков n, то со сколькими другими игроками каждый может сыграть? Вот 10 человек пришло. Один из них — ты. Со сколькими ты можешь сыграть?
Marsel
и это именно это и имеется ввиду в подобных ситуациях?))
Eugene
и это именно это и имеется ввиду в подобных ситуациях?))
Не знаю про подобные, надо рассматривать конкретные. И думать.
Marsel
Не знаю про подобные, надо рассматривать конкретные. И думать.
ну да, что то подобное встречал недавно типа n^2-1, тоже не понятно
s54820
не понял что из чего вычитается указатель на список -8 или - 16 ?
Ну офсеты же отличаются для 32-битной и для 64-битной системы. Посчитай сам, какой там там офсет у InMemoryOrderLinks.
s54820
где прочитать ?
Про что, про sizeof(void *)?
Aiwan \ (•◡•) / _bot
кто салатик заказывал?
Aiwan \ (•◡•) / _bot
мне кажется, или на потолке плесень?
Ruslan
мне кажется, или на потолке плесень?
черная плесень дорого или кто-то этажом выше запустил новый крузис на ультрах)
­
мне кажется, или на потолке плесень?
Это волосня. Она побрилась.
Eugene
Такой интересный вопрос у меня. Необходимо выполнить умножение 2-х длинных целых знаковых чисел длиной N слов, которые хранятся в дополнительном коде little-endian. Т.е. 2 — это 0002 0000 (hex, при условии, что слово = 16 бит, побайтно: 02 00 00 00), а -2 — FFFE FFFF (побайтно: FE FF FF FF). Для примера возьмём простой алгоритм умножения (без Карацубы), где для C = A * B каждое слово числа A умножается на каждое слово числа B и записывается в C со сдвигом и суммированием (с переносом при переполнении). У нас есть операции умножения знаковых чисел и беззнаковых, причём результат произведения может быть в 2 раза больше, чем множители. По моим наблюдениям, удобнее использовать беззнаковое умножение (каждой пары слов), например: FFFE FFFF x 0002 0000 = FFFC 0001 + 0000 FFFE 0002 = FFFC FFFF 0002 2-ку убираем, получаем FFFC FFFF = -4, всё ок. Именно поэтому 2-3-операндный imul в асме (где старшая часть произведения отбрасывается) используется как для знаковых чисел, так и для беззнаковых. При знаковом умножении получается так: FFFE FFFF x 0002 0000 = FFFC FFFF + 0000 FFFC FFFF = FFFC FFFB 0000 0001 Какая-то ерунда. По крайней мере, это требует преобразования но не очень понятному мне алгоритму. А теперь самое главное :) Необходимо определить — было бы переполнения при умножении. Понятное дело, что если мы вылезли за диапазон N слов, то переполнение было. А если нет? Я пока вижу только такой алгоритм: умножать абсолютные значения множителей (C = abs(A)*abs(B)), поменять знак произведения, если знаки A и B отличаются и сравнить знак результата с тем, что должно получиться (т.е. если знаки A и B разные, значит должно получиться отрицательное число). Это работает, но это, опять же, лишние операции по проверке и изменению знаков, к тому же, нужно ещё проверять множители на 0, т.к. при нуле результат не будет отрицательным, что может выдать ложный сигнал переполнения. Вопрос: можно ли (и самое главное, как — по какому алгоритму) определить переполнение после умножения без приведения исходных множителей к абсолютным величинам? Если нужно, алгоритм умножения можно чуть-чуть модифицировать (добавив что-то или заменив какие-то операции). Цель — упрощение кода.
Aiwan \ (•◡•) / _bot
#book ЭФФЕКТИВНОЕ ПРОГРАММИРОВАНИЕ СОВРЕМЕННЫХ МИКРОПРОЦЕССОРОВ
R
Здравствуйте, объясните пожалуйста, могут ли ехе файлы грузиться не по ImageBase? Я смотрел и в дизассемблере и в хекс редакторе, вижу что внутри ехе используются абсолютные вирт адреса, таблицы релокаций нет. Получается, их можно грузить только по 0х00400000 ?
Eugene
Здравствуйте, объясните пожалуйста, могут ли ехе файлы грузиться не по ImageBase? Я смотрел и в дизассемблере и в хекс редакторе, вижу что внутри ехе используются абсолютные вирт адреса, таблицы релокаций нет. Получается, их можно грузить только по 0х00400000 ?
Если ASLR отключен, то не может, даже при наличии релокаций. Если включен, то должны быть релоки. Если их нет, то либо ошибка будет, либо по базовому адресу грузиться будет, точно не скажу.
Eugene
ASLR — отделений бит в заголовке.
R
ясно, спасибо
Eugene
ясно, спасибо
Есть ещё, правда, принудительное использование ASLR, как-то включается в ОС, даже если в заголовке отключено. Но без релоков тут никак.
Сергей
есть знакомый препод, по вычислительной технике, застал момент ввода в работу ламповых компьютеров, на них же работал
Сергей
думаю, как заинтересовать его в онлайн активности, может архитектуру ЭВМ рассказать с нуля
Dmitrij
есть знакомый препод, по вычислительной технике, застал момент ввода в работу ламповых компьютеров, на них же работал
Если у человека есть немного времени и желание, думаю идея годная. Ну и от тебя конечно зависит, как преподнесёшь материал...
Aiwan \ (•◡•) / _bot
ему лет 80 должно быть
Dmitrij
ему лет 80 должно быть
интеллектуалы в большинстве случаев бодрячки ))
Сергей
ему лет 80 должно быть
так и есть, но знания универсальны в этой области и не устаревают, основы основ
Сергей
как вариант мотивировать его собрать свои конспекты и оформить в виде книги с математическими выкладками и конкретной практикой применения
Сергей
https://youtu.be/wvTIfKLy1Z0
Сергей
https://ru.wikipedia.org/wiki/MMIX_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)
Сергей
интересно почему MMIX никто не пытается реализовать
Сергей
или он слишком далек от реальной практики
Aiwan \ (•◡•) / _bot
#book Пирогов В. Ю. Ассемблер для Windows. Изд. 4-е
sc
полный ку
sc
помогите пж
sc
как вызывать руками vararg функции?
sc
точнее как пушить что-то арбитрарное на стек
sc
допустим std string
Ask
шошо?
sc
есть допустим функция foo(std::string, int, float)
sc
есть указатель на неё без прототипа
sc
есть список аргументов для вызова (типы правильные, дата верная) в формате типа void* buffer и size_t bufSize
sc
как мне эти аргументы запушить?
sc
явно ведь тот же char не один байт пушит
sc
а std::string мб референсом
Ask
гугл 1й же ссылкой ответ вроде как дает
sc
ну и че гуглить то?)
sc
я дурак не знаю че вбивать
Ask
а что ты хочешь сделать?
sc
вообще рефлексию в с++ делаю, чисто для общего развития
sc
вот столкнулся с проблемой при вызове методов
Ask
РЕФЛЕ́КСИЯ Размышление о своём психическом состоянии... %)
Ask
std string asm
sc
при чем тут стринг вообще, он как пример приводился
Ask
ну пример использования и получил
sc
которое мне не нужно
sc
не ну я конечно дебил и не умею объяснять
sc
но все же пример бесполезен
­
Оффтоп — во флудилку.
s54820
Оффтоп — во флудилку.
Можно генерировать машинный код на лету, будет не оффтоп.
sc
Оффтоп — во флудилку.
ок, где ты тут видишь оффтоп?)
sc
s234802893 прав, именно это я и просил
s54820
s234802893 прав, именно это я и просил
На самом деле всё уже давно написано и называется libffi. Но в простых случаях можно выделить кусок памяти, напихать туда пушей-мовов десятью строками, пометить память как исполняемую и вызывать. Берёшь ABI платформы и смотришь, кого куда пихать.
sc
ffi смотрел. вещь неплохая, согласен, мб заюзаю
sc
ну или как ты сказал сгенерить можно просто
sc
но!
sc
пушить те же инты просто
sc
а вот как сложные типы пихаются я понятия не имею