Estoy trabajando en un proyecto y necesito saber dónde se almacena la información tomada por el sensor del barómetro. Pienso en el eeprom, pero ¿exactamente dónde? ¿Hay una dirección específica o memoria de registro?
Mi objetivo es hacer el ataque de ROP en el sistema.
Compilé el código ArduPlane (solo la parte de Ardupilot relativa al avión y no a la estación de tierra), luego encontré el .elf y yo hicimos el comando
avr-objdump -S arduplane.elf > arduplane.lss
y ahora tengo la instrucción de todo el arduplane. En la sección del sensor encontré la función
static int32_t read_barometer(void){
barometer.read();
return altitude_filter.apply(barometer.get_atitude()*100.0);
}
que en el lss se convirtió:
static void init_barometer(void)
{
697e: cf 93 push r28
6980: df 93 push r29
barometer.calibrate(mavlink_delay);
6982: cc e8 ldi r28, 0x8C ; 140
6984: dc e0 ldi r29, 0x0C ; 12
6986: ce 01 movw r24, r28
6988: 6b e5 ldi r22, 0x5B ; 91
698a: 7e e4 ldi r23, 0x4E ; 78
698c: 0e 94 f6 8d call 0x11bec ; 0x11bec <_ZN7AP_Baro9calibrateEPFvmE>
}
void set_compass(Compass *compass) {
_compass = compass;
}
void set_barometer(AP_Baro *barometer) {
_barometer = barometer;
6990: d0 93 8b 07 sts 0x078B, r29
6994: c0 93 8a 07 sts 0x078A, r28
ahrs.set_barometer(&barometer);
gcs_send_text_P(SEVERITY_LOW, PSTR("barometer calibration complete"));
6998: 81 e0 ldi r24, 0x01 ; 1
699a: 90 e0 ldi r25, 0x00 ; 0
699c: 64 ec ldi r22, 0xC4 ; 196
699e: 7f e0 ldi r23, 0x0F ; 15
69a0: 0e 94 a4 34 call 0x6948 ; 0x6948 <_ZL15gcs_send_text_P12gcs_severityPK11prog_char_t>
}
69a4: df 91 pop r29
69a6: cf 91 pop r28
69a8: 08 95 ret
¿Los registros r29 y r28 están dedicados al barómetro?
¿Son 0x078B y 0x78A las direcciones de pila para la información?