嗨,我已经拆解了一些程序(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)
其余对我来说似乎毫无用处......
我想知道是否可以从旧版本恢复已删除的文件(一种干净的方式来执行此操作)
我已经重命名了一个文件用于某些测试,而不是我提交了所有的工作(我忘了重命名文件)并做了很多其他的提交......当我意识到,为时已晚......
此致,艾曼
当没有调试符号或没有可用的源时,是否可以配置gdb以调试汇编代码?我的意思是在执行逐步调试(下一步/步骤命令)时通过汇编指令显示汇编指令(不是对所有函数进行反汇编.只是将要执行的下一条指令)
此致,艾曼
我编写了一段代码,每当相关的(对我来说)网络信息发生变化时(主要是监听 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) 我想覆盖/更改linux处理ping icmp echo请求数据包的方式.意思是我想运行自己的服务器来回复传入的icmp(echo请求或其他)数据包.
但为了使其正常工作,我想我需要禁用从linux处理的默认ping icmp数据包.但我无法弄清楚如何做到这一点(我甚至不知道是什么处理icmp请求......内核?一些用户空间代码?)...我发现只是用iptables删除icmp echo请求.
为了帮助理解,让我解释一下我的目标:我希望能够通过ping发送一些数据.(简单)但我需要能够读取和提取该数据.另外,我希望能够回答一个特殊的echo-reply(嵌入了一些数据)