Почему есть несколько ходов вместо одного?

Заменить

dateTime.setText(app.getTotalDl());

С

dateTime.setText(""+app.getTotalDl());
0
задан Tommylee2k 18 January 2019 в 14:05
поделиться

2 ответа

[rbp-0x8] и [rbp-0x10] - две разные локальные переменные. Ваш код полностью отличается от дизассемблированного кода.

со следующим кодом c,

{
  int64_t a;    // [rbp-0x8] is a
  int64_t *p;   // [rbp-0x10] is p; not *p
  ...
}

Программа должна получить *(p+1) (размер 1 int64 равен 8 байтам) в RAX.

MOV  RAX, [rbp-0x10]  ; RAX <-- p
ADD  RAX, 8           ; RAX <-- p + 1
MOV  RAX, [RAX]       ; RAX <-- *(p + 1) 

Ваш код должен получить совершенно другую переменную a.

MOV  RAX, [rbp-0x8]   ; RAX <-- a
0
ответ дан W. Chang 18 January 2019 в 14:05
поделиться

Я так не думаю:

а)

0x00000000004005ef <+50>: mov rax,QWORD PTR [rbp-0x10] ; move the 8bytes starting at the address 
                                                       ; [rbp-0x10] to rax
0x00000000004005f3 <+54>: add rax,0x8                  ; rax = rax + 0x08 
0x00000000004005f7 <+58>: mov rax,QWORD PTR [rax]      ; move the 8bytes starting at the address 
                                                       ; [rax] to rax

б)

0x00000000004005ef <+50>: mov rax,QWORD PTR [rbp-0x8]  ; move the 8bytes starting at the address 
                                                       ; [rbp-0x8] to rax

«а)» выглядит так часть кода, которая загружает адрес, применяет (целочисленное) смещение и разыменовывает адрес. Однако, «b)» , начальный адрес отличается (хотя значение с этого другого адреса не читается, хотя).

0
ответ дан Jose 18 January 2019 в 14:05
поделиться
Другие вопросы по тегам:

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