@@ -323,15 +323,14 @@ impl Emu {
323
323
}
324
324
325
325
pub fn init_stack32(&mut self) {
326
-
326
+ // default if not set via clap args
327
327
if self.cfg.stack_addr == 0 {
328
328
self.cfg.stack_addr = 0x212000;
329
+ self.regs.set_esp(self.cfg.stack_addr + 0x1c000 + 4);
330
+ self.regs.set_ebp(self.cfg.stack_addr + 0x1c000 + 4 + 0x1000);
329
331
}
330
332
331
333
let stack = self.maps.create_map("stack", self.cfg.stack_addr, 0x030000).expect("cannot create stack map");
332
- self.regs.set_esp(self.cfg.stack_addr + 0x1c000 + 4);
333
- self.regs
334
- .set_ebp(self.cfg.stack_addr + 0x1c000 + 4 + 0x1000);
335
334
336
335
assert!(self.regs.get_esp() < self.regs.get_ebp());
337
336
assert!(self.regs.get_esp() > stack.get_base());
@@ -349,14 +348,13 @@ impl Emu {
349
348
}
350
349
351
350
pub fn init_stack64(&mut self) {
351
+ // default if not set via clap args
352
352
if self.cfg.stack_addr == 0 {
353
353
self.cfg.stack_addr = 0x22a000;
354
+ self.regs.rsp = self.cfg.stack_addr + 0x4000;
355
+ self.regs.rbp = self.cfg.stack_addr + 0x4000 + 0x1000;
354
356
}
355
357
356
- self.regs.rsp = self.cfg.stack_addr + 0x4000;
357
- self.regs.rbp = self.cfg.stack_addr + 0x4000 + 0x1000;
358
-
359
-
360
358
let stack = self.maps.create_map("stack", self.cfg.stack_addr, 0x6000).expect("cannot create stack map");
361
359
362
360
assert!(self.regs.rsp < self.regs.rbp);
@@ -414,7 +412,7 @@ impl Emu {
414
412
self.flags.f_nt = false;
415
413
}
416
414
417
- pub fn init(&mut self) {
415
+ pub fn init(&mut self, clear_registers: bool ) {
418
416
self.pos = 0;
419
417
420
418
if !atty::is(Stream::Stdout) {
@@ -425,7 +423,9 @@ impl Emu {
425
423
}
426
424
427
425
//println!("initializing regs");
428
- self.regs.clear::<64>();
426
+ if clear_registers {
427
+ self.regs.clear::<64>();
428
+ }
429
429
//self.regs.rand();
430
430
431
431
if self.cfg.is_64bits {
0 commit comments