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

Reply via email to