超简单的链表反汇编分析

admin 2022年3月26日08:32:30评论69 views字数 1142阅读3分48秒阅读模式

超简单的链表反汇编分析

扫一扫关注公众号,长期致力于安全研究超简单的链表反汇编分析

前言:本文主要介绍链表反汇编的分析



0x01 for的反汇编

首先可以先来学习一下for循环的反汇编

for(int i=0;i<20;++i){0041155E  mov         dword ptr [i],0 //初始化i00411565  jmp         wmain+30h (411570h) //以下是++i00411567  mov         eax,dword ptr [i] 0041156A  add         eax,1 //++i0041156D  mov         dword ptr [i],eax //给局部变量00411570  cmp         dword ptr [i],0//比较i与2000411574  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循环)

超简单的链表反汇编分析


0x02 链表的分析

通过for循环创建了一个单向链表

#include "stdafx.h"#include <stdlib.h>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;}
具体IDA分析如下,这是一个向后插入的单向链表

超简单的链表反汇编分析



11111
微信搜索关注 "安全族" 长期致力于安全研究


下方扫一下扫,即可关注超简单的链表反汇编分析

超简单的链表反汇编分析






本文始发于微信公众号(安全族):超简单的链表反汇编分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月26日08:32:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   超简单的链表反汇编分析https://cn-sec.com/archives/537531.html

发表评论

匿名网友 填写信息