Как разрешить ошибку, так как atos не может загружать символы для файла APP для архитектуры armv7? [Дубликат]

Я написал это в среде Rails . Это всего лишь пять строк JavaScript, если вы используете легкий плагин jQuery-формы.

Задача заключается в том, что загрузка AJAX работает, поскольку стандарт remote_form_for не понимает представления нескольких частей. Он не собирается отправлять данные файла. Rails ищет запрос AJAX.

Именно здесь вступает в игру плагин jQuery-form.

Вот код Rails для него:

<% remote_form_for(:image_form, 
                   :url => { :controller => "blogs", :action => :create_asset }, 
                   :html => { :method => :post, 
                              :id => 'uploadForm', :multipart => true }) 
                                                                        do |f| %>
 Upload a file: <%= f.file_field :uploaded_data %>
<% end %>

Вот соответствующий JavaScript:

$('#uploadForm input').change(function(){
 $(this).parent().ajaxSubmit({
  beforeSubmit: function(a,f,o) {
   o.dataType = 'json';
  },
  complete: function(XMLHttpRequest, textStatus) {
   // XMLHttpRequest.responseText will contain the URL of the uploaded image.
   // Put it in an image element you create, or do with it what you will.
   // For example, if you have an image elemtn with id "my_image", then
   //  $('#my_image').attr('src', XMLHttpRequest.responseText);
   // Will set that image tag to display the uploaded image.
  },
 });
});

И вот действие контроллера Rails, довольно ваниль:

 @image = Image.new(params[:image_form])
 @image.save
 render :text => @image.public_filename

Я использовал это в течение последних нескольких недель с Bloggity, и он работал как чемпион.

57
задан George Burdell 27 November 2012 в 01:25
поделиться

4 ответа

Вы должны вычислить адрес для использования с atos, вы не можете просто использовать его в стеке.

symbol address = slide + stack address - load address
  1. Значение slide - это значение vmaddr в LC_SEGMENT cmd (В основном это 0x1000). Для этого запустите следующее:
    otool -arch ARCHITECTURE -l "APP_BUNDLE/APP_EXECUTABLE" | grep -B 3 -A 8 -m 2 "__TEXT"
    
    Замените ARCHITECTURE на фактическую архитектуру, отображаемую в отчете о сбое, например. armv7. Замените APP_BUNDLE/APP_EXECUTABLE на путь к фактическому исполняемому файлу.
  2. stack address - это шестнадцатеричное значение из отчета о сбое.
  3. . load address может быть первым адресом, отображающим в секции Binary Images в самой передней части строки, содержащей ваш исполняемый файл. (Обычно первая запись).

Так как в прошлом значение slide было равно значению load address, это всегда срабатывало. Но поскольку Apple представила рандомизацию расположения пространства адреса , начиная с iOS 4.3 (в разных вариантах), адрес загрузки приложений рандомизирован по соображениям безопасности.

90
ответ дан Kerni 23 August 2018 в 16:12
поделиться

Простейшая альтернатива: вы можете использовать флаг atos -l, чтобы сделать это для математики для вас.

Предположим, что в вашем журнале сбоев вы указали следующую строку:

5   MyApp                   0x0044e89a 0x29000 + 4348058

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

Чтобы символизировать, выполните следующие действия:

atos -o MyApp.app/MyApp -arch armv7 -l 0x29000 0x0044e89a

Если вы не можете найти файл MyApp.app/MyApp, переименуйте файл «.ipa» в «.zip», разархивируйте его, и он будет в папке «Полезная нагрузка».

И если вы не знаете, какую архитектуру использовать (например, armv7 или armv7s), выделите часть «Двоичные изображения» в файле сбоя, и вы можете найти его там.

Приветствия

95
ответ дан cbh2000 23 August 2018 в 16:12
поделиться

Просто используйте dwarfdump:

dwarfdump --arch armv7 myApp.dSYM --lookup 0xaabbccdd | grep 'Line table'

Не нужно вообще делать какие-либо вычисления.

(Из Получить символ по адресу (символизирующий двоичную, iOS-сборку) ).

11
ответ дан Community 23 August 2018 в 16:12
поделиться

Для кого это определенное время не имеет значения для Load Address следующим образом:

Jan 14 11:02:39 Dennins-iPhone AppName[584] <Critical>: Stack Trace: (
    0   CoreFoundation                      0x2c3084b7 <redacted> + 150
    1   libobjc.A.dylib                     0x39abec8b objc_exception_throw + 38
    2   CoreFoundation                      0x2c21cc35 CFRunLoopRemoveTimer + 0
    3   AppName                             0x0005a7db AppName + 272347  

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

#! /bin/bash
read -p "[Path] [App Name] [Stack Address] [DecimalSum] " path appName stackAddress decimalSum
loadAddress=`echo "obase=16;ibase=10;$((stackAddress-decimalSum))" | bc`
atos -o $path/Payload/$appName.app/$appName -l $loadAddress $stackAddress -arch armv7

Он просто читает путь для приложения, имя приложения, адрес стека и значение после сигнала «+» (десятичное значение), а затем найдите значение для адреса загрузки для запуска команды atos.

3
ответ дан DenninDalke 23 August 2018 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: