On 19 August 2010 05:07, Bahadir <[email protected]> wrote: > Hi, > > I often work with assembly and one strong reason that prevents me from > changing existing assembly code is the difficulty and inconvenience to > track stack state when moving around statements. In that respect, it > would be really great to have a vim plugin that would show the stack > state at each assembler instruction. > > Here's an algorithm that would work: > 1.) First mark the first assembler statement that the stack recording > starts (e.g. the entry point to a function) > 2.) When cursor is moved over to another statement after that, the vim > plugin would automatically parse the statements from the first mark > and display the data pushed to stack. > 3.) Furthermore, the distance to various locations on the stack are > displayed, so that the correct offset can be added/subtracted from the > current stack pointer to reach those locations, without the need to > calculate from head. > 4.) This would greatly simplify the life of low-level C/assembler/ > embedded programmers. I believe assembly programming would become a > lot simpler. > > As an example I have an irq exception entry (ARM assembler): > 747 @ Stack state: |LR_IRQ<-|{original SP_SVC}| > 748 ldr r14, [r0, #IRQ_SPSR] @ Load irq spsr. > 749 is_psr_usr r14 @ Check previous mode > 750 str r14, [sp, #-64]! > 751 bne save_svc > 752 save_user: > 753 stmfd sp, {r1-r14}^ > 754 @ Stack state: |r1|...|r12|SP_USR|LR_USR|LR_IRQ{PC > return address}<-|{original SP_SVC}| > 755 @ Stack state: |spsr<-|<emtpy>|r1|...|r12|SP_USR|LR_USR| > LR_IRQ{PC return address}<-|{original SP_SVC}| > 756 save_svc: > 757 @ Stack state: |LR_IRQ<-|{original SP_SVC}| > 758 add sp, sp, #4 > 759 @ Stack state: |LR_IRQ|{original SP_SVC}<-| > 760 str sp, [sp, #-???? > 761 stmfd sp, {r1-r12} > 762 @ Stack state: |r1|...|r12|SP_USR|LR_USR|LR_IRQ{PC > return address}<-|{original SP_SVC}| > > See each stack state: comment that I wrote myself by calculating stack > positioning on every statement. Also see the ???? on line 760. I want > to store a value in a location relative to current SP. But every time > I change this code, I have to re-calculate positions from my head. Its > highly error prone.
I use IDA Pro nearly every day to analyse disassembly. Tracking the stack pointer can be a tricky problem. The method that IDA Pro uses is described here: http://hexblog.com/2006/06/simplex_method_in_ida_pro.html -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php
