扫一扫关注公众号,长期致力于安全研究
前言:本文主要介绍链表反汇编的分析
首先可以先来学习一下for循环的反汇编
for(int i=0;i<20;++i){
0041155E mov dword ptr [i],0 //初始化i
00411565 jmp wmain+30h (411570h)
//以下是++i
00411567 mov eax,dword ptr [i]
0041156A add eax,1 //++i
0041156D mov dword ptr [i],eax //给局部变量
00411570 cmp dword ptr [i],0//比较i与20
00411574 jge wmain+53h (411593h) //如果大于就跳出去
printf("%dn",i);
00411576 mov esi,esp
00411578 mov eax,dword ptr [i]
0041157B push eax
0041157C push offset string "%dn" (415644h)
00411581 call dword ptr [__imp__printf (4182CCh)] //printf打印
00411587 add esp,8 //堆栈平衡
0041158A cmp esi,esp //安全检查
0041158C call @ILT+325(__RTC_CheckEsp) (41114Ah)
}
00411591 jmp wmain+27h (411567h) //执行完跳转到++i
IDA分析如下,主要功能点在loc_40103A中,通过cmp比较来决定是否执行jge是否跳出去(这是另一个for循环)
通过for循环创建了一个单向链表
struct node{
int x;
struct node * next;
};
typedef struct node pnode;
int main(int argc, char* argv[])
{
pnode* head = (pnode*)malloc(sizeof(node));
pnode* curr;
int i;
for(i=1;i<=10;i++){
curr=(pnode*)malloc(sizeof(pnode));
curr->x = i;
curr->next = NULL;
head->next = curr;//下一个节点指向head
head = head->next;//本节点给head
}
while(head){
printf("%d",head->x);
curr->next;
}
return 0;
}
下方扫一下扫,即可关注
本文始发于微信公众号(安全族):超简单的链表反汇编分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论