(18.05.2022 21:17)wessonsm Wrote: daemon_n, мне кажется, для строки этот int означает указатель на строку (адрес строки), разве нет?
И как тогда передать в функцию имя дефа или pcx (скажем somedef.def), какое число использовать?
Все верно - это указатель на строку.
В героях строка может быть двух видов: массив символов, либо класс std::string (в героях он чуточку по своему сделан, но в целом это тоже самое). В обоих случаях они оба лежат в так называемой "куче" - такая область оперативной памяти (а есть ещё "стек"). И для получения доступа к ним и нужен указатель.
Следуем дальше: в функцию ты передаешь не саму строку (потому что вся строка может занимать очень очень много места (например всю "Войну и Мир")), а лишь указатель на строку, который весит всего 4 байта - это и есть тип int, хотя я не понимаю почему он знаковый (как по мне он должен быть uint). А программа сама потом по этому указателю найдёт данные в куче. Очень часто вы можете встретить проверку на null, которая означает что если адрес в указателе лежит - данные есть, если в указателе 0, то к данным невозможно обратиться
wessonsm,
daemon_n, если вы занимаетесь реверсом - вам нужно очень хорошо понимать разницу между значимыми типами и ссылочными типами данных.
А для этого нужно понимать разницу что такое стек и куча.
Указатель (4 байта) лежит в стеке.
Данные (размер может быть очень большой) лежат в куче.
К стеку скорость доступа многократно выше, чем к куче. Но стек имеет очень маленький размер в сравнении с кучей.
Настоятельно рекомендую просмотреть весь
этот плейлист для более глубокого понимания этих важных вещей.