当前位置: 技术问答>linux和unix
怎样增加decompress_kernel参数
来源: 互联网 发布时间:2016-06-18
本文导语: decompress_kernel的原型如下: ulg decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p, int arch_id) 现在希望增加一个参数ulg last_addr; 变成 ulg decompress_kernel(ulg output_start, ulg free_mem...
decompress_kernel的原型如下:
ulg decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
int arch_id)
现在希望增加一个参数ulg last_addr;
变成
ulg decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
int arch_id,ulg last_addr)
这时候,我想在head.s调用这个函数:
/*
* r0 = decompressed kernel length
* r1-r3 = unused
* r4 = kernel execution address
* r5 = decompressed kernel start
* r6 = processor ID
* r7 = architecture ID
* r8 = atags pointer
* r9-r14 = corrupted
*/
add r1, r5, r0 @ end of decompressed kernel
adr r2, reloc_start
ldr r3, LC1
add r3, r2, r3
1: ldmia r2!, {r9 - r14} @ copy relocation code
stmia r1!, {r9 - r14}
ldmia r2!, {r9 - r14}
stmia r1!, {r9 - r14}
cmp r2, r3
blo 1b
bl cache_clean_flush
add pc, r5, r0 @ call relocation code
/*
* We're not in danger of overwriting ourselves. Do this the simple way.
*
* r4 = kernel execution address
* r7 = architecture ID
*/
wont_overwrite: mov r0, r4
mov r3, r7
bl decompress_kernel
b call_kernel
我应该怎么修改这段arm 代码,让我能够传入第5个参数。。
ulg decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
int arch_id)
现在希望增加一个参数ulg last_addr;
变成
ulg decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
int arch_id,ulg last_addr)
这时候,我想在head.s调用这个函数:
/*
* r0 = decompressed kernel length
* r1-r3 = unused
* r4 = kernel execution address
* r5 = decompressed kernel start
* r6 = processor ID
* r7 = architecture ID
* r8 = atags pointer
* r9-r14 = corrupted
*/
add r1, r5, r0 @ end of decompressed kernel
adr r2, reloc_start
ldr r3, LC1
add r3, r2, r3
1: ldmia r2!, {r9 - r14} @ copy relocation code
stmia r1!, {r9 - r14}
ldmia r2!, {r9 - r14}
stmia r1!, {r9 - r14}
cmp r2, r3
blo 1b
bl cache_clean_flush
add pc, r5, r0 @ call relocation code
/*
* We're not in danger of overwriting ourselves. Do this the simple way.
*
* r4 = kernel execution address
* r7 = architecture ID
*/
wont_overwrite: mov r0, r4
mov r3, r7
bl decompress_kernel
b call_kernel
我应该怎么修改这段arm 代码,让我能够传入第5个参数。。
|
不东修改汇编的,可以用c语言写个函数,反编译下去掉些废指令应该可行
|
arm的汇编?
抽象,不知所云...
只能帮定了~
抽象,不知所云...
只能帮定了~
|
这个不懂, 来接分的。
不过,实在不明白,楼主为什么会有这样的需求?
或者仅仅是兴趣而已。
不过,实在不明白,楼主为什么会有这样的需求?
或者仅仅是兴趣而已。
|
关键要弄明白 decompress_kernel()
的参数是怎么使用寄存器的,你所增加的这个第5个参数是使用哪些寄存器,
往这些寄存器里传参数就可以了。
的参数是怎么使用寄存器的,你所增加的这个第5个参数是使用哪些寄存器,
往这些寄存器里传参数就可以了。
|
这个不懂。。。
只能帮顶了!
顺便学习~~
只能帮顶了!
顺便学习~~