Перейти к содержанию
Old Phone Forum
  • Вход

    Вы сейчас не залогинены на форуме.

    Для возможности комментариев, загрузки файлов, подписок на ответы - вам надо войти.

Определяем размер неиспользуемой оперативки


Рекомендуемые сообщения

В этой теме я расскажу как определить адрес и размер неиспользуемой оперативной памяти в свифтах, которую можно будет использовать для своих патчей :(

 

Для этого нам необходимо найти в прошивке адрес HEAP__top. Открываем BinEdit, загружаем прошивку и ищем следующий код:

??009FE5??209FE50EF0A0E1

Открываем результат поиска (это ARM-код, если не дизассемблируется, то выбираем в специальной опции на панели инструментов ARM Code), смотрим в найденном коде на самый первый адрес оперативки, добавляем к нему 0x3800, получаем адрес TFS4StackInBD_End. К полученному адресу TFS4StackInBD_End добавляем еще примерно 16 килобайт (0x4000), и получаем адрес, начиная с которого оперативная память больше не используется.

 

Пример.

Прошивка E200XEGD6

Ищем ??009FE5??209FE50EF0A0E1. Смотрим результат поиска:

2001026C:		LDR	R0=#0x30A10F40
20010270:		LDR	R2=#0x30A11F40
20010274:		MOV	PC, LR

0x30A10F40 D HEAP__top

 

Вычисляем адрес, с которого начинается неиспользуемая память:

0x30A10F40+0x3800+0x4000=0x30A18740

 

Вычисляем размер свободной памяти:

0x30FFFFFF-(0x30A10F40+0x3800+0x4000)=0x5E78BF

Это примерно 5,9 мегабайт :132:

 

Внимание!

Данный способ практически проверен только на E780 (XEFJ1). Всем, кто будет искать для своих прошивок адрес неиспользуемой оперативки, рекомендую на всякий случай сделать дамп памяти по найденному адресу, и посмотреть, что по этому адресу лежит.

 

Увы, непонятная ситуация получается со старыми свифтами (D500, E730, X700 etc...). В старых свифтах свободной оперативки должно быть не меньше, чем в новых, просто она не конце, а в где-то в середине (судя по прошивке D500BVDK8). Способа вычислить начало и конец неиспользуемой памяти для старых свифтов я пока не нашел.

  • Like 5
Ссылка на комментарий
Поделиться на другие сайты

Вычисляем размер свободной памяти:

0x30FFFFFF-(0x30A10F40+0x3800+0x4000)=0x5E78BF

Это примерно 5,9 мегабайт

Тогда в:

E740XEGF7 свободной оперативки примерно 2,9949 мегабайт

E740XEGJ1 свободной оперативки примерно 2,9948 мегабайт

Пожертвования отправлять сюда R256859050930

Ссылка на комментарий
Поделиться на другие сайты

Это примерно 5,9 мегабайт

...эт от четверти до трети общей... :an:
/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

Longhair, а откуда дровишки?

Есть подозрение, что эта область - Dynamic Pool Memory, в ней выделяется память при вызове Rtk50_11GetDynMemory.

  • Like 1
5073IA3.png
Ссылка на комментарий
Поделиться на другие сайты

vvyura, ты прав.

Почему-то при просмотре прошивки D500BVDK8 я обратил на это внимание, а в других прошивках этого не учел.

TFS4StackInBD_End это не только конечная граница TFS4Stack, это еще и начальная граница DynPoolMem, оказывается.

Таблица использования DynPoolMem лежит здесь p_Rtk_DynPoolDesc. В p_Rtk_FirstDynPoolMem и p_Rtk_LastDynPoolMem, соответственно, лежат начальные и конечные границы DynPoolMem.

Исходя из таблицы p_Rtk_DynPoolDesc, замечал использование свободной памяти лишь по адресу в первой ячейке таблицы, т.е. p_Rtk_FirstDynPoolMem.

Да и 3 метра из 5-ти, в самом конце оперативки, задействованы у меня уже довольно долгое время :evil: Никаких глюков не замечал.

В старых свифтах использование DynPoolMem очевидно (из D500BVDK8):

0x18097670 D DynPool
0x18663064 D a_TaskDescTable

Ссылка на комментарий
Поделиться на другие сайты

Попробовал на прошивке E200XEGJ2.

 

Искомый код:

2001026C:	LDR	R0=0x30A11088
20010270:	LDR	R2=0x30A12088
20010274:	MOV	PC, LR

 

А теперь запрашиваем 0x804 байта в различных участках пула:

 

LDR   R1, =0x00000804
MOV   R0, #0x21
BL	Rtk50_11GetDynMemory

возвращает адрес 0x30AE9ADC

 

LDR   R1, =0x00000804
MOV   R0, #0x25
BL	Rtk50_11GetDynMemory

возвращает адрес 0x30C3C28C

 

 

LDR   R1, =0x00000804
MOV   R0, #0x27
BL	Rtk50_11GetDynMemory

возвращает адрес 0x30F6654C

 

В районе этих адресов в памяти есть какие-то данные.

Т.е. используется весь диапазон...

 

Да и 3 метра из 5-ти, в самом конце оперативки, задействованы у меня уже довольно долгое время wink.png Никаких глюков не замечал.

Суслика видишь? А он есть...

5073IA3.png
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


×
×
  • Создать...