dio4 4 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба Добрый день. Пробую простенькую программку .global main main: MOV R0, #100 LDR R1, =0xABCD876 STR R1, [R0] LDRB R2, [R0, #1] MOV R0, #0 MOV R7, #1 svc 0 при запуске ее в gdb получаю ошибку, указанную в теме и не пойму, в чем дело. На борту имею : PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)" Помогите разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба У меня имеется подозрение, что писать в адрес 0x100 не удаётся и именно это вызывает исключение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dio4 4 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба С удовольствием поблагодарю, если скажете, почему не удается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 9 hours ago, dio4 said: если скажете, почему не удается. Потому что там нет памяти. Почитайте на досуге что такое Virtual Memory 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dio4 4 2 августа, 2023 Опубликовано 2 августа, 2023 (изменено) · Жалоба 9 часов назад, xvr сказал: Потому что там нет памяти. Почитайте на досуге что такое Virtual Memory Я читаю все что нужно. Буду благодарен, если вы свою уверенность мне передадите. Можете конкретно показать (карта памяти, ссылка на datasheet, что-то еще,..), что там нет памяти, разрешенной для записи. А так это голословно выглядит, - "это так, потому что я так сказал"... Изменено 2 августа, 2023 пользователем dio4 ошибка 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба https://ru.wikipedia.org/wiki/Ошибка_сегментации Что еще нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dio4 4 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба Мне что, понизили репутацию за то, что я задаю правильные вопросы а вы не можете или не хотите на них ответить? Здорово...ну так скажите, что не хотите (не можете) и я не буду продолжать. Зачем так поступать? Это как-то не прилично. Только что, Arlleex сказал: https://ru.wikipedia.org/wiki/Ошибка_сегментации Что еще нужно? Нужна конкретика, которой у меня пока нет. Версия была - запись туда, куда нельзя - я попросил показать и объяснить, ПОЧЕМУ туда нельзя - не показали. Затем что-то сказали о вирт. памяти - снова конкретики нет...Эта ошибка может возникнуть и при попытке доступа к члену массива, которого нет и при записи, куда нельзя и много еще почему. Я и прошу помочь с конкретикой, если она есть. Если ее нет, зачем что-то писать? Может есть какой пример, исправляющий мой(чтобы заработало) с объяснением почему так , а не иначе? Буду очень признателен...а просто затыкать рот, понижая репутацию...как-то неэтично и не красиво...ИМХО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба 19 minutes ago, dio4 said: Буду очень признателен Скажу так. Я не работаю с линукс, но прекрасно понимаю, что в такой системе для каждой запущенной программы выделяется адресное пространство из общей памяти на системе. Это и называется виртуальной памятью. Т.е. программа работает не с физическими адресами вроде 0xFFAB 7708, которые каждый раз при запуске могут быть разными, и с адресным пространством, например 0 - 0x000 FFFF. Очень условно. Но в этом адресном пространстве есть секции только для чтения, или, возможно, что там находится какая-то служебная память. Не знаю. Но предполагаю. Вот именно поэтому Вам туда запрещено писать. В принципе, писать по конкретному адресу памяти - плохой стиль программирования, хотя и незапрещённый. Но даже на системе bare-metal, т.е. без ОС, Вы не можете просто так взять и что-то записать по адресу 0x100, т.к. там вообще ничего может и не быть. Или там находится FLASH-память, которая не пишется напрямую, а только через контроллер памяти. Подробней Вам рассказать не могу, т.к., повторюсь, не работаю с ОС Linux на встраиваемых системах. Да и на ПК тоже. Посмотрите в скрипт линкера (ld), который заведует распределением памяти для Вашей программы. Возможно, там содержится ответ, что находится по адресу 0x100... 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dio4 4 2 августа, 2023 Опубликовано 2 августа, 2023 (изменено) · Жалоба 1 час назад, haker_fox сказал: кажу так. Я не работаю с линукс, но прекрасно понимаю, что в такой системе для каждой запущенной программы выделяется адресное пространство из общей памяти на системе. Это и называется виртуальной памятью. Т.е. программа работает не с физическими адресами вроде 0xFFAB 7708, которые каждый раз при запуске могут быть разными, и с адресным пространством, например 0 - 0x000 FFFF. Очень условно. Не совсем так. Виртуальная память связывает реальные машинные адреса с логическими, те с теми, которые генерирует процессор, когда обрабатывает сегменты памяти(внутри которых области могут иметь одинаковые адреса), кучу, стек, символические имена для процесса и тд . Логические адреса внутри сегментов обычно формируются на этапе компиляции. "Служебная" как вы сказали память, - это то, что используется системой(ядром), туда процесс из пользовательского пространстве не имеет доступа(если только ядро не совершает переключение контекста при некоторых системных вызовах). Все это понятно и не мудрствуя лукаво, я просто ожидал, что кто-то знающий покажет через objdump и strace, что мой пример лезет конкретно не туда, куда ему можно. Я просто ожидал помощи специалиста, понимающего архитектуру ARM. В скрипт линкера смотреть видимо не нужно, потому что все делает gcc и заведует линкером тоже. Но спасибо за попытку помочь, я вам искренне признателен. Видимо все и еще раз спасибо вам за потраченное время. PS Если интересно, программка должна показывать Endianness в той системе arm, где запущена, но вот пока нет... Изменено 2 августа, 2023 пользователем dio4 Добавление. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба 2 hours ago, dio4 said: Я просто ожидал помощи специалиста, понимающего архитектуру ARM. ARM тут не при чем. Вам нужен специалист по Linux. 2 hours ago, dio4 said: что кто-то знающий покажет через objdump Посмотрите сами (это просто). Запустите objdump -p <file.elf> (на ваш elf файл). Будет нечто такое: Program Header: LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**12 filesz 0x000000000000f600 memsz 0x000000000000f600 flags r-x LOAD off 0x000000000000f600 vaddr 0x0000000000010600 paddr 0x0000000000010600 align 2**12 filesz 0x0000000000111150 memsz 0x0000000000111150 flags rw- При загрузке вашей программы Linux создаст в виртуальной памяти ТОЛЬКО сегменты, которые помеченны тэгом LOAD. Стартовый адрес (виртуальный) печатается в поле vaddr, размер - в поле memsz. В Linux загрузка начинается не с нуля (на мой пример не смотрите - это не Linux и не ARM, это bare metal RISC-V) 2 hours ago, dio4 said: В скрипт линкера смотреть видимо не нужно, потому что все делает gcc и заведует линкером тоже. Как раз нужно - ибо карта этих самых LOAD сегментов задаётся именно там. Если хотите, что бы gcc позвботился и о вашей памяти не занимайтесь ручным распеделением - сделайте в ассемблере секцию .data и пишите в неё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dio4 4 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба Все это очень интересно, хотя мне и так было известно, но есть большое НО - все, что вы написали так и не отвечает на мой вопрос. А цитировать другие учебные материалы я и так умею. PS - Так за что вы мне репутацию понизили? Это вы сделали xvr. PPS И все таки специалист нужен по ARM(в контексте Raspberry), понимающий куда и что там пишется и почему эта ошибка вылазит, потому что аналогичная прога на других архитектурах работает. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 3 августа, 2023 Опубликовано 3 августа, 2023 · Жалоба 21 hours ago, dio4 said: все, что вы написали так и не отвечает на мой вопрос. Либо вы троль, либо не понимаете элементарных вещей. На ваш вопрос вам дали весьма подробный ответ. 21 hours ago, dio4 said: А цитировать другие учебные материалы я и так умею. Только цитировать, или понимать их тоже? 21 hours ago, dio4 said: PS - Так за что вы мне репутацию понизили? Это вы сделали xvr. Я вам пока ничего не понижал, а пытался помочь. Видимо зря. Вот сейчас понижу, за тролинг. 21 hours ago, dio4 said: PPS И все таки специалист нужен по ARM(в контексте Raspberry), Психиатр вам нужен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dio4 4 4 августа, 2023 Опубликовано 4 августа, 2023 (изменено) · Жалоба 19 часов назад, xvr сказал: Либо вы троль, либо не понимаете элементарных вещей. На ваш вопрос вам дали весьма подробный ответ. Только цитировать, или понимать их тоже? Я вам пока ничего не понижал, а пытался помочь. Видимо зря. Вот сейчас понижу, за тролинг. Психиатр вам нужен Слушайте, вы не хамите. Прекратите визгливую истерику и будьте мужчиной. Следите за своим языком и не переходите на личности. У вас что - синдром Даннинга-Крюгера? Так отнеситесь к себе более критично. Так не достойно вести себя в общественных местах.. Изменено 4 августа, 2023 пользователем dio4 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 7 hours ago, dio4 said: Слушайте, вы не хамите. Прекратите визгливую истерику и будьте мужчиной. Я видел тут много хамов, но вы это нечто. За 10 дней на форуме не с того не с его наехать на человека, который вам пытался помочь, в потом учить его жизни. Надеюсь, что мы вас тут больше не увидим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dio4 4 6 августа, 2023 Опубликовано 6 августа, 2023 (изменено) · Жалоба В 04.08.2023 в 16:26, xvr сказал: Я видел тут много хамов, но вы это нечто. За 10 дней на форуме не с того не с его наехать на человека, который вам пытался помочь, в потом учить его жизни. Надеюсь, что мы вас тут больше не увидим. Вы слишком самоуверенны. Не надо говорить "МЫ", вы - это не все обитатели форума и не весь портал. Еще раз прошу вас прекратить истерику и предлагаю начать заново общение, тем более, что с другими форумчанами все было нормально и меня все сразу понимали. 1. Если вы пытались помочь, а я вас не понял - прошу извинить. 2. Я вас обидеть не хотел, вы меня не так поняли скорее всего. 3. Я просил реальную(конкретную, по существу) помощь, а не "конспект лекций", НЕ ПРИВОДЯЩИЙ к решению проблемы. 4. Прошу прекратить личные оскорбления в виде" Психиатр вам нужен..", - знаете, за такие вещи в приличных местах морду бьют. 5. Итог: предлагаю спокойные коллегиальные и взаимоуважительные отношения. Изменено 6 августа, 2023 пользователем dio4 1 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться