在内存中运行可执行程序

Linux中定位内存泄漏 1. 什么是内存泄漏内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的(内存块的大小可以在程序运行期决定)、使用完后必须显示释放的内存。应用程序一般使用malloc、realloc、new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块。否则,这块内存就不能被再次使用,造成这块内存泄漏。2. 内存泄漏的检测C++程序缺乏相应的手段来检测内存 阅读详情
 在内存中运行可执行程序,好处是可以给程序加壳,加密源程序,静态反汇编无法获得PE输入节,但是因为运行后仍然是独立的进程,所以没办法防止远程线程注入,挂接API钩子。

  1 typedef IMAGE_SECTION_HEADER ( * PIMAGE_SECTION_HEADERS)[ 1 ];      2      3  //  计算对齐后的大小       4  unsigned  long  GetAlignedSize(unsigned  long  Origin, unsigned  long  Alignment)      5   {      6      return  (Origin  +  Alignment  -   1 )  /  Alignment  *  Alignment;      7 }       8      9  //  计算加载pe并对齐需要占用多少内存     10  //  未直接使用OptionalHeader.SizeOfImage作为结果是因为据说有的编译器生成的exe这个值会填0      11  unsigned  long  CalcTotalImageSize(PIMAGE_DOS_HEADER MzH     12                                  , unsigned  long  FileLen     13                                  , PIMAGE_NT_HEADERS peH     14                                  , PIMAGE_SECTION_HEADERS peSecH)     15   {     16     unsigned  long  res;     17      //  计算pe头的大小      18      res  =  GetAlignedSize( peH -> OptionalHeader.SizeOfHeaders , peH -> OptionalHeader.SectionAlignment);     19     20      //  计算所有节的大小      21       for (  int  i  =   0 ; i  <  peH -> FileHeader.NumberOfSections;  ++ i)     22       {     23          //  超出文件范围      24           if (peSecH[i] -> PointerToRawData  +  peSecH[i] -> SizeOfRawData  >  FileLen)    25           {  26              return   0 ;     27         }   28          else   if (peSecH[i] -> VirtualAddress) // 计算对齐后某节的大小      29             {     30              if (peSecH[i] -> Misc.VirtualSize)     31               {     32                 res  =  GetAlignedSize( peSecH[i] -> VirtualAddress  +  peSecH[i] -> Misc.VirtualSize     33                     , peH -> OptionalHeader.SectionAlignment);     34             }      35              else     36               {     37                 res  =  GetAlignedSize( peSecH[i] -> VirtualAddress  +  peSecH[i] -> SizeOfRawData     38                     , peH -> OptionalHeader.SectionAlignment);     39             }      40         }      41          else   if ( peSecH[i] -> Misc.VirtualSize  <  peSecH[i] -> SizeOfRawData )     42           {     43             res  +=  GetAlignedSize( peSecH[i] -> SizeOfRawData     44                 , peH -> OptionalHeader.SectionAlignment);     45         }      46          else     47           {     48             res  +=  GetAlignedSize( peSecH[i] -> Misc.VirtualSize     49                 , peH -> OptionalHeader.SectionAlignment);     50         } //  if_else      51      } //  for      52           53      return  res;     54 }      55     56     57     58     59  //  加载pe到内存并对齐所有节      60  BOOL AlignPEToMem(  void   * Buf     61                   ,  long  Len     62                   , PIMAGE_NT_HEADERS  & peH     63                   , PIMAGE_SECTION_HEADERS  & peSecH     64                   ,  void   *& Mem     65                   , unsigned  long   & ImageSize)     66   {     67     PIMAGE_DOS_HEADER SrcMz; //  DOS头      68      PIMAGE_NT_HEADERS SrcPeH; //  PE头      69      PIMAGE_SECTION_HEADERS SrcPeSecH; //  节表      70           71     SrcMz  =  (PIMAGE_DOS_HEADER)Buf;     72     73      if ( Len  <   sizeof (IMAGE_DOS_HEADER) )      74          return  FALSE;     75          76      if ( SrcMz -> e_magic  !=  IMAGE_DOS_SIGNATURE )     77          return  FALSE;     78          79      if ( Len  <  SrcMz -> e_lfanew  +  ( long ) sizeof (IMAGE_NT_HEADERS) )     80          return  FALSE;     81     82     SrcPeH  =  (PIMAGE_NT_HEADERS)(( int )SrcMz  +  SrcMz -> e_lfanew);     83      if ( SrcPeH -> Signature  !=  IMAGE_NT_SIGNATURE )     84          return  FALSE;     85     86      if ( (SrcPeH -> FileHeader.Characteristics  &  IMAGE_FILE_DLL)  ||      87         (SrcPeH -> FileHeader.Characteristics  &  IMAGE_FILE_EXECUTABLE_IMAGE  ==   0 )  ||      88         (SrcPeH -> FileHeader.SizeOfOptionalHeader  !=   sizeof (IMAGE_OPTIONAL_HEADER)) )     89       {     90          return  FALSE;     91     }      92     93     94     SrcPeSecH  =  (PIMAGE_SECTION_HEADERS)(( int )SrcPeH  +   sizeof (IMAGE_NT_HEADERS));     95     ImageSize  =  CalcTotalImageSize( SrcMz, Len, SrcPeH, SrcPeSecH);     96     97      if ( ImageSize  ==   0  )     98          return  FALSE;     99         100     Mem  =  VirtualAlloc( NULL, ImageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);  //  分配内存     101       if ( Mem  !=  NULL )    102       {    103          //  计算需要复制的PE头字节数     104          unsigned  long  l  =  SrcPeH -> OptionalHeader.SizeOfHeaders;    105          for (  int  i  =   0 ; i  <  SrcPeH -> FileHeader.NumberOfSections;  ++ i)    106           {    107              if ( (SrcPeSecH[i] -> PointerToRawData)  &&     108                 (SrcPeSecH[i] -> PointerToRawData  <  l) )    109               {    110                 l  =  SrcPeSecH[i] -> PointerToRawData;    111             }     112         }     113         memmove( Mem, SrcMz, l);    114         peH  =  (PIMAGE_NT_HEADERS)(( int )Mem  +  ((PIMAGE_DOS_HEADER)Mem) -> e_lfanew);    115         peSecH  =  (PIMAGE_SECTION_HEADERS)(( int )peH  +   sizeof (IMAGE_NT_HEADERS));    116    117          void   * Pt  =  ( void   * )((unsigned  long )Mem     118              +  GetAlignedSize( peH -> OptionalHeader.SizeOfHeaders    119             , peH -> OptionalHeader.SectionAlignment)    120             );    121    122          for ( i  =   0 ; i  <  peH -> FileHeader.NumberOfSections;  ++ i)    123           {    124              //  定位该节在内存中的位置     125               if (peSecH[i] -> VirtualAddress)    126                 Pt  =  ( void   * )((unsigned  long )Mem  +  peSecH[i] -> VirtualAddress);    127    128              if (peSecH[i] -> SizeOfRawData)    129               {    130                  //  复制数据到内存     131                  memmove(Pt, ( const   void   * )((unsigned  long )(SrcMz)  +  peSecH[i] -> PointerToRawData), peSecH[i] -> SizeOfRawData);    132                  if (peSecH[i] -> Misc.VirtualSize  <  peSecH[i] -> SizeOfRawData)    133                     Pt  =  ( void   * )((unsigned  long )Pt  +  GetAlignedSize(peSecH[i] -> SizeOfRawData, peH -> OptionalHeader.SectionAlignment));    134                  else   //  pt 定位到下一节开始位置     135                      Pt  =  ( void   * )((unsigned  long )Pt  +  GetAlignedSize(peSecH[i] -> Misc.VirtualSize, peH -> OptionalHeader.SectionAlignment));    136             }     137              else    138               {    139                 Pt  =  ( void   * )((unsigned  long )Pt  +  GetAlignedSize(peSecH[i] -> Misc.VirtualSize, peH -> OptionalHeader.SectionAlignment));    140             }     141         }     142     }     143      return  TRUE;    144 }     145    146    147    148 typedef  void   * (__stdcall  * pfVirtualAllocEx)(unsigned  long ,  void   * , unsigned  long , unsigned  long , unsigned  long );    149 pfVirtualAllocEx MyVirtualAllocEx  =  NULL;    150    151 BOOL IsNT()    152   {    153      return  MyVirtualAllocEx != NULL;    154 }     155    156  //  生成外壳程序命令行     157  char   * PrepareShellExe( char   * CmdParam, unsigned  long  BaseAddr, unsigned  long  ImageSize)    158   {    159      if (IsNT())    160       {    161          char   * Buf  =   new   char [ 256 ];    162         memset(Buf,  0 ,  256 );    163         GetModuleFileName( 0 , Buf,  256 );    164         strcat(Buf, CmdParam);    165          return  Buf;  //  请记得释放内存;-)     166      }     167      else    168       {    169          //  Win98 170 171           return  NULL;    172     }     173 }     174    175  //  是否包含可重定向列表     176  BOOL HasRelocationTable(PIMAGE_NT_HEADERS peH)    177   {    178      return  (peH -> OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress)    179          &&  (peH -> OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size);    180 }     181    182    183    184    185 #pragma pack(push,  1 )    186 typedef  struct  {    187     unsigned  long  VirtualAddress;    188     unsigned  long  SizeOfBlock;    189 }   * PImageBaseRelocation;    190 #pragma pack(pop)    191    192  //  重定向PE用到的地址     193  void  DoRelocation(PIMAGE_NT_HEADERS peH,  void   * OldBase,  void   * NewBase)    194   {    195     unsigned  long  Delta  =  (unsigned  long )NewBase  -  peH -> OptionalHeader.ImageBase;    196     PImageBaseRelocation p  =  (PImageBaseRelocation)((unsigned  long )OldBase     197          +  peH -> OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);    198      while (p -> VirtualAddress  +  p -> SizeOfBlock)    199       {    200         unsigned  short   * pw  =  (unsigned  short   * )(( int )p  +   sizeof ( * p));    201          for (unsigned  int  i = 1 ; i  <=  (p -> SizeOfBlock  -   sizeof ( * p))  /   2 ;  ++ i)    202           {    203              if (( * pw)  &   0xF000   ==   0x3000 )  {    204                 unsigned  long   * t  =  (unsigned  long   * )((unsigned  long )(OldBase)  +  p -> VirtualAddress  +  (( * pw)  &   0x0FFF ));    205                  * t  +=  Delta;    206             }     207              ++ pw;    208         }     209         p  =  (PImageBaseRelocation)pw;    210     }     211 }     212    213  //  卸载原外壳占用内存     214  BOOL UnloadShell(HANDLE ProcHnd, unsigned  long  BaseAddr)    215   {    216     typedef unsigned  long  (__stdcall  * pfZwUnmapViewOfSection)(unsigned  long , unsigned  long );    217     pfZwUnmapViewOfSection ZwUnmapViewOfSection  =  NULL;    218     BOOL res  =  FALSE;    219     HMODULE m  =  LoadLibrary( " ntdll.dll " );    220      if (m)  {    221         ZwUnmapViewOfSection  =  (pfZwUnmapViewOfSection)GetProcAddress(m,  " ZwUnmapViewOfSection " );    222          if (ZwUnmapViewOfSection)    223             res  =  (ZwUnmapViewOfSection((unsigned  long )ProcHnd, BaseAddr)  ==   0 );    224         FreeLibrary(m);    225     }     226      return  res;    227 }     228    229  //  创建外壳进程并获取其基址、大小和当前运行状态     230  BOOL CreateChild( char   * Cmd, CONTEXT  & Ctx, HANDLE  & ProcHnd, HANDLE  & ThrdHnd,     231                  unsigned  long   & ProcId, unsigned  long   & BaseAddr, unsigned  long   & ImageSize)    232   {    233     STARTUPINFOA si;    234     PROCESS_INFORMATION pi;    235     unsigned  long  old;    236     MEMORY_BASIC_INFORMATION MemInfo;    237     memset( & si,  0 ,  sizeof (si));    238     memset( & pi,  0 ,  sizeof (pi));    239     si.cb  =   sizeof (si);    240         241     BOOL res  =  CreateProcess(NULL, Cmd, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL,  & si,  & pi);  //  以挂起方式运行进程;     242        if (res)  {    243         ProcHnd  =  pi.hProcess;    244         ThrdHnd  =  pi.hThread;    245         ProcId  =  pi.dwProcessId;    246          //  获取外壳进程运行状态,[ctx.Ebx+8]内存处存的是外壳进程的加载基址,ctx.Eax存放有外壳进程的入口地址     247          Ctx.ContextFlags  =  CONTEXT_FULL;    248         GetThreadContext(ThrdHnd,  & Ctx);    249         ReadProcessMemory(ProcHnd, ( void   * )(Ctx.Ebx + 8 ),  & BaseAddr,  sizeof (unsigned  long ),  & old);  //  读取加载基址     250           void   * p  =  ( void   * )BaseAddr;    251          //  计算外壳进程占有的内存     252           while (VirtualQueryEx(ProcHnd, p,  & MemInfo,  sizeof (MemInfo)))    253           {    254              if (MemInfo.State  =  MEM_FREE)  break ;    255             p  =  ( void   * )((unsigned  long )p  +  MemInfo.RegionSize);    256         }     257         ImageSize  =  (unsigned  long )p  -  (unsigned  long )BaseAddr;    258     }     259      return  res;    260 }     261    262  //  创建外壳进程并用目标进程替换它然后执行     263  HANDLE AttachPE( char   * CmdParam, PIMAGE_NT_HEADERS peH, PIMAGE_SECTION_HEADERS peSecH,     264                  void   * Ptr, unsigned  long  ImageSize, unsigned  long   & ProcId)    265   {    266     HANDLE res  =  INVALID_HANDLE_VALUE;    267     CONTEXT Ctx;    268     HANDLE Thrd;    269     unsigned  long  Addr, Size;    270      char   * s  =  PrepareShellExe(CmdParam, peH -> OptionalHeader.ImageBase, ImageSize);    271      if (s == NULL)  return  res;    272      if (CreateChild(s, Ctx, res, Thrd, ProcId, Addr, Size))  {    273          void   * p  =  NULL;    274         unsigned  long  old;    275          if ((peH -> OptionalHeader.ImageBase  ==  Addr)  &&  (Size  >=  ImageSize))  { //  外壳进程可以容纳目标进程并且加载地址一致     276              p  =  ( void   * )Addr;    277             VirtualProtectEx(res, p, Size, PAGE_EXECUTE_READWRITE,  & old);    278         }     279          else   if (IsNT())  {    280              if (UnloadShell(res, Addr))  { //  卸载外壳进程占有内存     281                  p  =  MyVirtualAllocEx((unsigned  long )res, ( void   * )peH -> OptionalHeader.ImageBase, ImageSize, MEM_RESERVE  |  MEM_COMMIT, PAGE_EXECUTE_READWRITE);    282             }     283              if ((p  ==  NULL)  &&  HasRelocationTable(peH))  { //  分配内存失败并且目标进程支持重定向     284                  p  =  MyVirtualAllocEx((unsigned  long )res, NULL, ImageSize, MEM_RESERVE  |  MEM_COMMIT, PAGE_EXECUTE_READWRITE);    285                  if (p) DoRelocation(peH, Ptr, p);  //  重定向     286              }     287         }     288          if (p)  {    289             WriteProcessMemory(res, ( void   * )(Ctx.Ebx + 8 ),  & p,  sizeof (DWORD),  & old);  //  重置目标进程运行环境中的基址     290              peH -> OptionalHeader.ImageBase  =  (unsigned  long )p;    291              if (WriteProcessMemory(res, p, Ptr, ImageSize,  & old))  { //  复制PE数据到目标进程     292                  Ctx.ContextFlags  =  CONTEXT_FULL;    293                  if ((unsigned  long )p  ==  Addr)    294                     Ctx.Eax  =  peH -> OptionalHeader.ImageBase  +  peH -> OptionalHeader.AddressOfEntryPoint;  //  重置运行环境中的入口地址     295                   else    296                     Ctx.Eax  =  (unsigned  long )p  +  peH -> OptionalHeader.AddressOfEntryPoint;    297                 SetThreadContext(Thrd,  & Ctx); //  更新运行环境     298                  ResumeThread(Thrd); //  执行     299                  CloseHandle(Thrd);    300             }     301              else  { //  加载失败,杀掉外壳进程     302                  TerminateProcess(res,  0 );    303                 CloseHandle(Thrd);    304                 CloseHandle(res);    305                 res  =  INVALID_HANDLE_VALUE;    306             }     307         }     308          else  { //  加载失败,杀掉外壳进程     309              TerminateProcess(res,  0 );    310             CloseHandle(Thrd);    311             CloseHandle(res);    312             res  =  INVALID_HANDLE_VALUE;    313         }     314     }     315     delete[] s;    316      return  res;    317 }     318    319    320    321    322   /**/ /**/ /**/ /* ******************************************************/   323 { ******************************************************* }   324 { *                 从内存中加载并运行exe               * }   325 { ******************************************************* }   326 { * 参数:                                                }   327 { * Buffer: 内存中的exe地址                               }   328 { * Len: 内存中exe占用长度                                }   329 { * CmdParam: 命令行参数(不包含exe文件名的剩余命令行参数)}   330 { * ProcessId: 返回的进程Id                               }   331 { * 返回值: 如果成功则返回进程的Handle(ProcessHandle),   }   332 {            如果失败则返回INVALID_HANDLE_VALUE           }   333 { ******************************************************* }   334  /****************************************************** */    335 HANDLE MemExecute( void   * ABuffer,  long  Len,  char   * CmdParam, unsigned  long   * ProcessId)    336   {    337     HANDLE res  =  INVALID_HANDLE_VALUE;    338     PIMAGE_NT_HEADERS peH;    339     PIMAGE_SECTION_HEADERS peSecH;    340      void   * Ptr;    341     unsigned  long  peSz;    342      if (AlignPEToMem(ABuffer, Len, peH, peSecH, Ptr, peSz))    343       {    344         res  =  AttachPE(CmdParam, peH, peSecH, Ptr, peSz,  * ProcessId);    345         VirtualFree(Ptr, peSz, MEM_DECOMMIT);    346     }     347      return  res;    348 }     349    350  //  初始化     351  class  CInit    352   {    353  public :    354     CInit()    355       {    356         MyVirtualAllocEx  =  (pfVirtualAllocEx)GetProcAddress(GetModuleHandle( " Kernel32.dll " ),  " VirtualAllocEx " );    357     }     358 } Init;    359    360    361    362    363  364  365  366  int  main( int  argc,  char *  argv[]) 367   { 368     FILE *  fp; 369     fp  =  fopen( " E://CProject//DBGVIEW.EXE " , " rb " ); 370  371      if  ( fp ) 372       { 373  374         fseek(fp, 0l ,SEEK_END); 375          int  file_size = ftell(fp); /**/ /* 获取文件长度 */  376          fseek(fp, 0l ,SEEK_SET); /**/ /* 回到文件头部 */     377          378          379         LPBYTE pBuf  =   new  BYTE[file_size];    380         memset( pBuf,  0 , file_size);    381  382         fread(pBuf,file_size, 1 ,fp); 383  384         DWORD id  =  GetCurrentProcessId(); 385         unsigned  long  ulProcessId  =   0 ;    386         MemExecute( pBuf, file_size,  "" ,  & ulProcessId);    387         delete[] pBuf;    388          389     }    390      391      return   0 ; 392 } 
实现exe从资源中加载到内存中运行 这是网上的一段代码稍微修改了下,实现在windows下将程序加载到资源,运行时从资源加载到内存,并运行 立即下载

相关推荐

从内存中运行exe程序

1. 把你的程序读要内存 2. 以 CREATE_SUSPENDED模式CreateProcess打开svchost.exe 3. 修改svchost.exe页面的属性,然后把要运行的那个程序的内容拷贝到svchost.exe页面 4. 然后再运行 实质想当于是 披着/svchost.exe进程的相关信息/这张皮,而皮里面的肉都被改了

在内存中启动EXE程序(过程详解)

打开文件 这个文件可加密,打开文件的同时解密成EXE文件即可。 char szFileName[] = "Virus.exe"; HANDLE hFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_A...

weixin_44045581的博客 6282

动态加载EXE文件到内存执行1

动态加载EXE文件到内存执行 //***************************************************************

进程和可执行程序

内存中,而我们删除的程序自身是在磁盘中的,所以在这里并不影响程序继续运行。

Hsifles的博客 481

Hive数据仓库分层架构实战:4层黄金模型×6大业务场景×万亿级数据优化方案

根据《2023数据中台成熟度报告》,‌78%的ETL任务性能瓶颈‌源于分层设计不合理。本文基于某头部电商平台PB级数据仓库建设经验,结合金融风控、用户画像、实时大屏等核心场景,深度解析‌ODS→DWD→DWS→ADS‌四层架构设计原则,揭秘‌万亿级数据治理方案‌与‌维度建模20大避坑策略‌。

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 1485

TeXstudio完整安装配置教程(2025最新版)

至此,你已经完成了TeXstudio的完整安装和配置!现在你可以:✅ 使用TeXstudio编写LaTeX文档✅ 正确编译中英文混排的文档✅ 掌握基本的编辑和配置技巧LaTeX的学习曲线较陡,但一旦掌握,你会发现它在学术写作中的强大之处。建议从简单的文档开始练习,逐步掌握更高级的功能。祝你LaTeX写作顺利!如果有任何问题,欢迎在评论区留言交流。关键词:TeXstudio安装、LaTeX环境配置、中文LaTeX、TeX Live、学术论文写作更新日期:2025年10月。

weixin_51241407的博客 4506

C:从编译到运行,一个可执行程序的内存分区是如何构建与协作的?

本文详细解析了C语言程序从编译到运行过程中内存分区的构建与协作机制。重点介绍了代码区、栈区、堆区等核心内存分区的功能特点及交互原理,帮助开发者深入理解程序内存管理,避免常见内存错误并优化性能。

weixin_30875157的博客 403

给STM32F103的7寸屏找个新UI:LVGL 8.2裸机移植保姆级教程(附避坑清单)

本文详细介绍了如何将LVGL 8.2裸机移植到STM32F103开发板,特别针对7寸大屏(800×480分辨率)进行优化配置。从环境准备、工程搭建到显示驱动移植、内存优化与性能调优,提供完整的解决方案和避坑清单,帮助开发者快速实现美观的用户界面。

weixin_29181861的博客 415

程序的内存布局

代码在可执行程序中的对应关系 如何执行编译出来的a.out文件呢? 命令行敲如a.out文件,之后就可运行了。操作系统怎么知道这是一个可执行程序的呢?操作系统在接到./a.out这个命令后回去读文件头,读文件头看一下这个文件头里面对应的是不是可执行程序的信息。如果是的话,操作系统就知道这是一个可执行程序,操作系统就要为这个可执行程序分配一些内存空间来给其运行。这个内存空间很有可能一部分当做

zegeyzz的专栏 620

YOLO26涨点改进| TGRS 2026 | 独家创新首发、注意力改进篇| 引入LCGA局部曲率引导注意力,保持局部稳定性的同时突出关键几何区域,含多种创新改进,促进YOLO26所有任务高效涨点

🔥本文提出LCGA(局部曲率引导注意力)模块,通过引入曲率信息改进YOLO26网络模型。LCGA在局部窗口内利用深度卷积构造曲率代理,调制标准窗口注意力,使模型更关注道路、边界等曲线型结构,提升遥感图像超分辨率中的几何保真度。相比普通注意力,LCGA能精准聚焦关键几何区域,减少边缘断裂和轮廓偏移,同时保持较低计算开销。实验表明LCGA显著提升性能,在UCMerced数据集上PSNR提升0.2148dB。文章提供了三种改进方案。

Ai缝合怪、助力小伙伴高效发论文 228

科技与伦理的平衡点:人类计算的伦理

科技与伦理的平衡点:人类计算的伦理 关键词 科技与伦理 人类计算 隐私问题 道德决策自动化 公平性与偏见 法律与社会责任 摘要 本

AI天才研究院 1164

进程,可执行程序,可执行程序实例之间的关系

可执行程序是磁盘上的文件,实例是内存中的运行时代码和数据。

lza_csdn2019的博客 919

部分旧版统信国产系统下载资源

注:全部自来网络查找,建议到官网下载最新版。

aggs1990的专栏 5265

Linux_动态库与静态库(其一)

1.动态库和静态库的定义 动态库(.so):动态库是编译后不嵌入目标文件中的共享库,在程序运行的时候才去链接动态库的代码,可以被多个程序共享使用,通常以 .so 结尾。 静态库(.a):静态库是将一组目标文件(.o文件)打包成一个单一的归档文件。在编译时,链接器会将所需的目标文件代码复制到最终生成的可执行文件中,程序运行的时候将不再需要静态库,通常以.a结尾。 库的命名规则: lib+库名+后缀...

weixin_40611990的博客 110

基于ADMM的TV正则化最小化稀疏实现图像重建

ADMM算法是一种求解带有约束条件的优化问题的有效方法,它可以将原问题分解成两个子问题,然后交替求解这两个子问题,直到收敛。为了解决这些问题,研究人员提出了许多图像重建方法,其中一种常用的方法是基于正则化的方法。在图像重建中,TV正则化是一种比较常用的正则化方法,可以有效地降低图像的噪声,并保持图像细节特征。通过本文的介绍和源代码的演示,我们可以看出基于ADMM的TV正则化最小化稀疏实现图像重建的方法是一种简单、高效、有效的图像重建方法,能够在一定程度上提高图像质量,对于实际应用具有一定的参考意义。

学习使你进步。 1762

微信小程序 - 解决支付报错 requestPayment:fail access denied (微信支付提示错误requestPayment:拒绝访问失败,真机运行测试或打包编译上线后报错问题)

微信小程序,微信支付,wx.requestPayment,微信小程序支付报错requestPayment:fail access denied,调不起微信,无法唤起支付弹窗,支付失败,支付权限没问题,小程序上线后支付报错,小程序真机测试支付报错,微信小程序苹果ios系统手机无法支付,小程序发布上线后支付报错,本地测试没问题,拒绝访问失败,小程序调起支付API requestPayment:fail:access denied微信开发者工具正常支付,权限没问题,微信公众平台,依旧报错怎么办,检查了appid都

🏆 前端领域优质创作者 1万+

嵌入式中c语言运行过程,嵌入式C语言程序的运行

我们做C语言中这么多年,都知道这样一句话,C语言代码形成可执行程序,需要经过编译->汇编->链接三个阶段。背都背熟了,但是到底啥意思,每一步都会产生一些什么东西,很多人都不是太了解。今天就详细的来说说这个问题:先看下图,在这个图中,我详细的描述了,整个过程及中间的一些步骤:代码段,只读数据段,读写数据段,未初始化数据段属于静态区域。栈和堆属于动态区域。代码段,只读数据段和读写数据段将在...

weixin_28701593的博客 731

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

程序中内存布局

程序中内存布局 程序文件的一般布局 1、不同代码在可执行程序中的对应关系 程序与进程 1、程序与进程不同 a、程序是静态的概念,表现形式为一个可执行文件 b、进程是动态的概念,程序由操作系统加载运行后得到进程 c、每个程序可以对应多个进程 b、每个进程只能对应一个程序 2、文件布局在内存中的映射 各个段的作用 1、堆栈段在程序运行后才正式存在的,是程序运行的基础 2、.bss段存放的是未初始化的全局变量和静态变量 3、.text段存放的始程序中的可执行代码 4、data段保存的是已经初始化了的全局变量

weixin_43985500的博客 308

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

静态内存 —— 动态内存(堆) —— 栈内存

一、三种内存 1、栈内存 保存栈对象:保存函数调用相关信息(局部非静态对象、函数参数、、、)。 生存期:调用函数开始时在栈区分配内存,函数结束时释放内存。 2、动态内存 保存动态对象:通过new在内存池中申请的,没有足够空间会抛出异常(std::bad_alloc),delete释放内存,并置空指针,少delete或者多delete都会造成...

weixin_41565755的博客 1467

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言--程序的翻译环境(编译和链接)和运行环境

文章目录

羟基与苯的博客 996

编译和链接

有关C语言的编译和链接的相关理解 【只是粗略的了解步骤】

aaa114514aaaa的博客 1441

C程序的内存空间分配

可执行程序包括BSS段、数据段、代码段。 在类UNIX系统下可使用size命令查看可执行文件的段大小信息。如size a.out: ~/Desktop/MyC$ size a.out text data bss dec hex filename 1672 600 8 2280 8e8 a.out 1.数据段存放已初始化的...

weixin_40763897的博客 3606

汇编语言入门第四天(王爽-汇编语言)

一、可执行程序的文件装入内存并运行的原理 在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的P2程序,将P1从可执行文件中加载入内存,P1才得以运行,P1运行完毕后,应该将CPU的控制权交还给使它得以运行的P2程序。 二、基本指令: MOV AX,0 注解: AX = 0; ADD AX,2 注解:AX = AX + 2; ...

xinhuayw的专栏 123
上一篇: 使用 Visual C++ 防御功能保护您的代码
下一篇: 用VS2005也能制作体积很小的Win32程序(2KB - 3KB)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值