小编Aym*_*uma的帖子

试图了解主要的反汇编指令

嗨,我已经拆解了一些程序(linux),我写的是为了更好地理解它是如何工作的,我注意到主要功能始终以:

lea    ecx,[esp+0x4] ; I assume this is for getting the adress of the first argument of the main...why ?
and    esp,0xfffffff0 ; ??? is the compiler trying to align the stack pointer on 16 bytes ???
push   DWORD PTR [ecx-0x4] ; I understand the assembler is pushing the return adress....why ?
push   ebp                
mov    ebp,esp
push   ecx  ;why is ecx pushed too ??
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:为什么所有这些工作都完成了?我只了解使用:

push   ebp                
mov    ebp,esp
Run Code Online (Sandbox Code Playgroud)

其余对我来说似乎毫无用处......

linux compiler-construction x86 assembly gcc

17
推荐指数
2
解决办法
3966
查看次数

bzr:在使用bazaar进行一些提交后恢复已删除的文件

我想知道是否可以从旧版本恢复已删除的文件(一种干净的方式来执行此操作)

我已经重命名了一个文件用于某些测试,而不是我提交了所有的工作(我忘了重命名文件)并做了很多其他的提交......当我意识到,为时已晚......

此致,艾曼

bazaar file restore commit

9
推荐指数
2
解决办法
4271
查看次数

告诉gdb反汇编"未知"代码

当没有调试符号或没有可用的源时,是否可以配置gdb以调试汇编代码?我的意思是在执行逐步调试(下一步/步骤命令)时通过汇编指令显示汇编指令(不是对所有函数进行反汇编.只是将要执行的下一条指令)

此致,艾曼

assembly gdb disassembly

8
推荐指数
1
解决办法
1150
查看次数

监听 PF_NETLINK 套接字时获取所有链接和地址信息

我编写了一段代码,每当相关的(对我来说)网络信息发生变化时(主要是监听 RTM_NEWADDR、RTM_DELADDR、RTM_NEWLINK 和 RTM_DELLINK),它都会通知我。每次我拔掉插头、更改 ip 或收到通知时,这都工作得很好。唯一的问题是,我第一次启动代码时,我希望它能够提供整个当前状态(RTM_GETLINK 和 RTM_GETADDR)。

我可以请求 RTM_GETLINK 或 RTM_GETADDR:

memset(&req, 0, sizeof(req));
req.nlmsghdr.nlmsg_len   = NLMSG_LENGTH(sizeof(struct rtgenmsg));
req.nlmsghdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP; /* request to dump all kernel subsystem */
req.nlmsghdr.nlmsg_type  = RTM_GETLINK;  /* link information              */
req.nlmsghdr.nlmsg_seq   = 1;
req.nlmsghdr.nlmsg_pid   = pid;
req.rtgenmsg.rtgen_family = AF_UNSPEC;

iovec.iov_base = &req;
iovec.iov_len  = req.nlmsghdr.nlmsg_len;

memset(&msghdr, 0, sizeof(msghdr));
msghdr.msg_iov     = &iovec;
msghdr.msg_iovlen  = 1;
msghdr.msg_name    = &addr;
msghdr.msg_namelen = sizeof(addr);

/*
** TODO: check for number of sent characters
**       on …
Run Code Online (Sandbox Code Playgroud)

c netlink

5
推荐指数
1
解决办法
6106
查看次数

在linux中处理ping的是什么?

我想覆盖/更改linux处理ping icmp echo请求数据包的方式.意思是我想运行自己的服务器来回复传入的icmp(echo请求或其他)数据包.

但为了使其正常工作,我想我需要禁用从linux处理的默认ping icmp数据包.但我无法弄清楚如何做到这一点(我甚至不知道是什么处理icmp请求......内核?一些用户空间代码?)...我发现只是用iptables删除icmp echo请求.

为了帮助理解,让我解释一下我的目标:我希望能够通过ping发送一些数据.(简单)但我需要能够读取和提取该数据.另外,我希望能够回答一个特殊的echo-r​​eply(嵌入了一些数据)

linux ping icmp

2
推荐指数
2
解决办法
2637
查看次数

标签 统计

assembly ×2

linux ×2

bazaar ×1

c ×1

commit ×1

compiler-construction ×1

disassembly ×1

file ×1

gcc ×1

gdb ×1

icmp ×1

netlink ×1

ping ×1

restore ×1

x86 ×1