Сейчас на форуме: asfa, Rio (+5 невидимых)

 eXeL@B —› Вопросы новичков —› размер структуры С++ в ассемблере
Посл.ответ Сообщение

Ранг: 10.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 31 января 2014 17:08
· Личное сообщение · #1

Прошу помощи в конкретных вопросах, а именно:

Имеется .exe файл с идущим в комплекте .pdb файлом, в нем есть структура с постоянным размером, назовем её условно struct_1 (состоящей из кучи других структур постоянного размера)

Цель - изменить размер структуры входящей в struct_1

1. обязательно ли у структур должен быть метод/поле _size?

2. если нужно изменить размер структуры входящей в struct_1, то размер struct_1 нужно менять на то же кол-во байт соответственно, а так же всех других, в которые может входить изменяемая?

3. всегда ли размер структуры указан в ассемблере (например при выделении памяти alloc/malloc) точно или он может быть составным? (зависит от компилятора?)




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 31 января 2014 17:19 · Поправил: reversecode
· Личное сообщение · #2

если это не указатели на структуры, то нереально
поплывут все смешения полей в структуре, а значит нужно весь екзе править,
находить какое было смещение и вписывать новое, и так по всем поля структуры, даже если их с десяток полей,
то в программе они могут вызываться и оптимизироваться совершенно по разному

лучше пересмотрите само ТЗ



Ранг: 10.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 31 января 2014 17:34
· Личное сообщение · #3

В основном используются указатели.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 31 января 2014 17:39
· Личное сообщение · #4

ну тогда
1) нет
2) если указатель, нет
3) ничего не понял, но если стурктура выделяется через malloc/alloc/new то размер там всегда,
если в хипе, то размер вычислять тяжелее



Ранг: 10.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 31 января 2014 17:51
· Личное сообщение · #5

Тогда еще такой вопрос - если приложение выполняет

memcpy(указатель на структуру типа struct_1, struct_1, размер)

как можно проверить размеры структур 1 и 2 аргумента имея их адреса во время бряка?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 31 января 2014 17:55
· Личное сообщение · #6

размер стурктуры никак не задается в самой стуктуре, только если создатель явно его задал, для каких то целей
если в вашем pdb нет явного размера в полях самой структуры, то никак




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 01 февраля 2014 11:55 · Поправил: Dr0p
· Личное сообщение · #7

reversecode

Размер структуры равен максимальному смещению в ней + выравнивание. Также обычно размер структуры равен обьёму памяти, выделяемой под эту структуру. Логично ?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 февраля 2014 15:10
· Личное сообщение · #8

он не об этом говорил
есть указатель на выделеную память,
представь что значение выделеной памяти ты пропустил перехватить
как по одному указателю посчитать размер который выделили на него ?




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 01 февраля 2014 15:16 · Поправил: Dr0p
· Личное сообщение · #9

reversecode

Решение от цели зависит. Вычисление размера произвольных структур это задача реверса, также для IDP техники необходимо вычислять размер. Структуры без использующего её кода нет, так что можно по коду найти макс смещение, отслеживая память по ссылке(это если в динамике без анализа кода). Иногда расчётный размер брался много больше реального размера. Но опять же это смотря что в буфере - зависит от задачи.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 февраля 2014 15:29
· Личное сообщение · #10

я не сказал что этот размер нельзя вычислить,
но подходом который хочет угадывать ТС, это невозможно

а так понятно, что если все приложение разобрать, то можно найти где что и какого размера резервировалось

а если тупо набитые структуры, то их размер и в pdb можно посчитать




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 01 февраля 2014 17:20
· Личное сообщение · #11

reversecode

Тут вопрос нужно угадать вначале:

> memcpy(указатель на структуру типа struct_1, struct_1, размер)
> как можно проверить размеры структур 1 и 2 аргумента имея их адреса во время бряка?

Размер ведь явно задан, тогда что проверять

Быть может имелась в виду валидация памяти ?

Что есчо это может быть не представляю..


 eXeL@B —› Вопросы новичков —› размер структуры С++ в ассемблере
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати