导航:首页 > 编程语言 > 反汇编代码偏移

反汇编代码偏移

发布时间:2023-06-14 16:08:31

A. 如何:使用“反汇编”窗口

默认情况下隐藏只有在“选项”对话框中的“调试”节点下启用了地址级调试后,该功能才可用。
但对于脚本或
SQL
调试是不可用的。

反汇编
”窗口显示与
编译器
所创建的指令对应的汇编代码
如果正在调试
托管代码
,则这些
汇编指令
对应于由实时
(JIT)
编译器创建的本机代码,而不是由
Visual
Studio
编译器生成的
Microsoft
中间语言
(MSIL)。
除汇编指令外,
“反汇编”窗口还可显示如下可选信息:
每条指令所在的
内存地址
对于本机应用程序,这是实际内存地址。
对于
Visual
Basic、C#
或托管代码,这是距离函数开头的偏移量。
程序集
代码派生于的源代码。
代码字节

实际计算机或
MSIL
指令的字节表示形式。
内存地址的符号名。
对应于源代码的行号。
汇编语言指令由
助记符
(指令名称的缩写)和代表变量、寄存器以及常量的符号所组成。
每一条
机器语言
指令由一个汇编语言助记符代表,通常其后还跟有一个或多个变量、寄存器或常量。
如果您无法阅读汇编语言但又想充分利用“反汇编”窗口,请参考有关汇编语言编程的好书。
汇编语言编程超出了我们对“反汇编”窗口进行简单介绍的讨论范围。
汇编语言代码在很大程度上依赖处理器的寄存器(对托管代码而言,依赖公共语言运行时寄存器),您将发现协同使用“反汇编”窗口和“寄存器”窗口将很有用,可以允许您检查寄存器内容。
您很可能愿意使用汇编语言,而从来不会愿意或需要查看原始的、数字形式的
机器代码
指令。
不过,如果愿意的话,可以利用“内存”窗口或从“反汇编”窗口的
快捷菜单
中选取“代码字节”来查看。
注意显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本
若要更改设置,请在“工具”菜单上选择“导入和导出设置”。
有关更多信息,请参见使用设置。

B. 嵌入式ARM STM32 反汇编 代码分析

RCC寄存器组的基地址放在PC+156位置处,所以LDR r1,[pc,#156] 指令的意思是在当前地址加上156的位置取得一个32位的数字放在r1。

C. 怎样反汇编bzImage-platinum-ChinaUnix博客

具体步骤如下:

#! /bin/sh

set -x

#
# 一般gzip压缩包的magic值为0x8b1f后跟0x0008,或者。
# 这里就是要找出这个偏移。
# 119116,就是这个偏移,这个偏移在不同的bzImage里是不同的,所以,这里需要手动调整一下。
# 解压后的文件即vmlinux.bin
od -h -A d bzImage | grep --color -m 3 -A 1 -i 8b1f
dd if=bzImage bs=1 skip=11916 | gunzip > vmlinux.bin

# 调用我写的一个python脚本,生成gnu linker script。
./genlds.py > vmlinux.elf.lds

# 构造 ELF 信息,结果文件为vmlinux.elf
ld -m elf_x86_64 --format binary --oformat elf64-x86-64 -T vmlinux.elf.lds vmlinux.bin -o vmlinux.elf
# 如果是32位系统,可以用以下命令
#ld -m elf_i386 --format binary --oformat elf32-i386 -T vmlinux.elf.lds vmlinux.bin -o vmlinux.elf

# 删除在上一步生成的多余符号。
obj --strip-symbol _binary_vmlinux_bin_start --strip-symbol _binary_vmlinux_bin_end --strip-symbol _binary_vmlinux_bin_size vmlinux.elf
# 设置 .text section标志,否则objmp -d不能正常工作,只能用objmp -D。
obj --set-section-flag .text=alloc,readonly,code vmlinux.elf

# 以后只是出于验证目的。
# 以schele函数作为一个样本,检查在vmlinux.elf文件里是不是包括了正确的偏移。
grep --color "[tT] schele$" System.map
readelf -s vmlinux.elf | grep " schele$" --color

genlds.py内容如下:

#! /usr/bin/python

import sys

#将 形如 fffffff8989 的字符串转换为数字形式。
def to_no(hexstr):
ret = 0
start = -1
len_hexstr = len(hexstr)
while start>=-len_hexstr:
c = hexstr[start]
if c in "0123456789":
n = ord(c) - ord('0')
elif c in "abcdef":
n = ord(c) - ord('a') + 0xa
elif c in "ABCDEF":
n = ord(c) - ord('A') + 0xa
ret |= long(n<<((-start-1)*4))
start -= 1
return ret

# 计算addr-base
def sym_offset(addr, base):
if base == "missing-base":
return "missing-offset"
addr = to_no(addr)
base = to_no(base)
return hex(int(addr-base))

lines = file("System.map").readlines()
result=""

# 求.text的开始地址
base="missing-base"
for line in lines:
line = line.strip()
addr, type, sym = line.split(" ")
if type in "tT":
if sym in ("startup_64", "startup_32"):
base = addr
break
# 生成lds中的符号行。
for line in lines:
line = line.strip()
addr, type, sym = line.split(" ")
if type in "tT":
offset = sym_offset(addr, base)
result+="\t%s = %s; /* orig: 0x%s */\n" % (sym, offset, addr)

# 生成需要的脚本
template="""
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
SECTIONS
{
. = 0x%s;
.text . : {
*(.data)
%s}
}
"""
print template % (base, result)

以下是反汇编的出来部分结果:

ffffffff80466ca0 <interruptible_sleep_on>:
ffffffff80466ca0: 55 push %rbp
ffffffff80466ca1: 48 ba ff ff ff ff ff mov $0x7fffffffffffffff,%rdx
ffffffff80466ca8: ff ff 7f
ffffffff80466cab: be 01 00 00 00 mov $0x1,%esi
ffffffff80466cb0: 48 89 e5 mov %rsp,%rbp
ffffffff80466cb3: c9 leaveq
ffffffff80466cb4: e9 c7 fe ff ff jmpq ffffffff80466b80 <__sched_text_start>
ffffffff80466cb9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)

ffffffff80466cc0 <schele>:
ffffffff80466cc0: 55 push %rbp
ffffffff80466cc1: 48 c7 c0 80 ef 62 80 mov $0xffffffff8062ef80,%rax
ffffffff80466cc8: 48 c7 c2 00 b4 62 80 mov $0xffffffff8062b400,%rdx
ffffffff80466ccf: 48 89 e5 mov %rsp,%rbp
ffffffff80466cd2: 41 57 push %r15
ffffffff80466cd4: 41 56 push %r14
ffffffff80466cd6: 41 55 push %r13
ffffffff80466cd8: 41 54 push %r12
ffffffff80466cda: 53 push %rbx
ffffffff80466cdb: 48 81 ec 98 00 00 00 sub $0x98,%rsp
ffffffff80466ce2: 48 c7 85 78 ff ff ff movq $0xffffffff8062ef80,-0x88(%rbp)
ffffffff80466ce9: 80 ef 62 80

阅读全文

与反汇编代码偏移相关的资料

热点内容
dede工具 浏览:507
5g网盟app怎么下载 浏览:486
微信备份老是连接中断 浏览:886
出台多少份文件 浏览:380
鞋子怎么搭配衣服的app 浏览:755
文件名使用的通配符的符号是什么 浏览:916
lol分卷文件损坏怎么办 浏览:276
6分管车螺纹怎么编程 浏览:732
海口农商银行信用卡app是什么 浏览:770
win10任务栏文件夹我的电脑 浏览:14
安卓nba2k18 浏览:776
文件夹密码怎么修改密码 浏览:271
苹果数据中心用什么服务器 浏览:769
省内圆通快递寄文件夹需要多少钱 浏览:740
iphone程序加密 浏览:884
win10文件夹调整文件行高 浏览:681
创意手绘教程 浏览:754
微信删除帐号信息 浏览:596
mysql操作类文件 浏览:649
绕过xp密码 浏览:158

友情链接