这是test.txt:
0x01,0xDF,0x93,0x65,0xF8
0x01,0xB0,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,0xB2,0x00,0x76
Run Code Online (Sandbox Code Playgroud)
如果我运行
awk -F, 'BEGIN{OFS=","}{$2="";print $0}' test.txt
结果是:
0x01,,0x93,0x65,0xF8
0x01,,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,,0x00,0x76
Run Code Online (Sandbox Code Playgroud)
$2 没有被删除,它只是变空了。我希望在打印 $0 时,结果是:
0x01,0x93,0x65,0xF8
0x01,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,0x00,0x76
Run Code Online (Sandbox Code Playgroud) 我知道callq指令的作用;在这个答案中有描述。指令应该有一个参数,它应该是被调用函数的地址。
但是,在反汇编目标文件时,我看到以下行显示了一条callq具有两个值而不是一个参数的指令:
1e: e8 00 00 00 00 callq 23 <main+0x19>
Run Code Online (Sandbox Code Playgroud)
我假设这23是返回地址,<main+0x19>是要调用的函数的地址。但是,被调用的函数并不位于 address main+0x19。
什么是这两个值的含义23,并main+0x19在拆卸的显示callq指令?
原始 C 代码:
#include <stdio.h>
void fun(int a)
{
}
int main()
{
int a = 1234;
fun(a);
}
Run Code Online (Sandbox Code Playgroud)
objdump -D main.o main.asm 反汇编代码:
0000000000000000 <fun>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 89 7d fc mov %edi,-0x4(%rbp)
7: 90 nop
8: 5d pop …Run Code Online (Sandbox Code Playgroud) 我的Makefile中的%无效。
我已经在Ubuntu 16.04 x64上测试了makefile。
我的makefile代码是:版本1
CC=gcc
OBJ=main.o
TARGET:=main
.PHONY: clean
all : main
# ${OBJ}:%.o:%.c
%.i : %.c
$(info Preprocess: build main.i)
${CC} -E -o $@ $<
%.s : %.i
$(info Compile: build main.s)
${CC} -S -o $@ $<
%.o : %.s
$(info Assemble: build main.o)
${CC} -c -o $@ $<
main : main.o
$(info Link: build main.o)
${CC} -o $@ $^
clean:
rm -f *.o *.out *.s *.i *.asm *.map ${OBJ} main
Run Code Online (Sandbox Code Playgroud)
运行make,终端显示以下消息:
gcc -c -o main.o main.c
Link: …Run Code Online (Sandbox Code Playgroud) linux ×2
assembly ×1
awk ×1
c ×1
cut ×1
disassembly ×1
makefile ×1
object-files ×1
sed ×1
x86-64 ×1