关于进程间的访问权限等进程间控制资料收集

定位HandleTableEntry(Windows内核学习笔记) 通过HandleTable定位HandleTableEntry的方法: typedef union _EXHANDLE { struct { ULONG_PTR TagBits:2;//这两位为0 ULONG_PTR Index:29;//句柄表的索引 }; struct { ULONG_PTR... 阅读详情

http://www.vckbase.com/

DUPLICATEHANDLE函数可以实现将同步内核对象被拷贝并且将原内核对象关闭, 从而达到可以自由控制内核对象的目的, 这可以实现使得只能单一启用的进程成为多启用的进程的目的。

实现方法:

只要用钩子WH_GETMESSAGE挂钩并实现如下代码即可

LRESULT HookProc(int code, WPARAM wParam, LPARAM lParam)    
{   
  STARTUPINFO startUpInfo;
 GetStartupInfo(&startUpInfo);

 char str[MAX_PATH];
 LPSTR lpStr = startUpInfo.lpTitle;
 if (!g_bFounded)
 {
  if (lpStr != NULL)
  {
   _splitpath(lpStr,NULL, NULL, str, NULL);

   DWORD iStrLen = MAX_PATH;
   DWORD dwRegType = 0;
   RegQueryValueExA(HKEY_CURRENT_USER, "PeHook//HookedProcessName", NULL, &dwRegType, (LPBYTE)g_strAppName, &iStrLen);
   if (strcmp(str,/*"wmplayer"*/g_strAppName) == 0)
   {
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    DWORD rl;
    BOOL Result = FALSE;

    //打开进程令牌环
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);

    //获得进程本地唯一ID
    if (LookupPrivilegeValueA(NULL, "SeDebugPrivilege", &tp.Privileges[0].Luid) )
    {
     tp.PrivilegeCount = 1;
     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
     //调整权限
     Result = AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, &rl);
    }

    if (Result)
    {
     char  buffer[200];
     HANDLE hSrcProc = GetCurrentProcess();
     DWORD dwError = GetLastError();
     HANDLE hSrcHandle = (HANDLE)0x38;
     HANDLE hCurProc= GetCurrentProcess();
     HANDLE hTargetHandle = 0;
     BOOL bRet = DuplicateHandle(hSrcProc, hSrcHandle, hCurProc, &hTargetHandle, DUPLICATE_SAME_ACCESS, FALSE, DUPLICATE_CLOSE_SOURCE);
     
     if (bRet)
     {
      CloseHandle(hTargetHandle);
      g_bFounded = TRUE;
     }

}

}
 return CallNextHookEx(glhHook,code,wParam,lParam);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////

资料:

优快云: http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310408a23450add306ac0d0622e95c51484642c1d1020fefa7a65505584d87f6001ad4356e8e4732f77552fa0edca9f3caaace22238f92123716c913164c46da5dc3624d651e14de8df0e97bfe74392b9a3a4c82520dd52756df1fa9c290a03bb1be76246&p=8e6ed55f86cc4bf30be2943848&user=baidu

优快云:  http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c4224627003ab8f12422141980852d3d5aeb1e41eaf234762a0022aa98cb9549dcba902f2b8e3034074fc70358c75cf28b102a9660d007a9b81897adf74684afa2808e05048b12127bf0e78c2e1715ba39a7486ab4f08e48640252edb17225a2082068de&p=c933891985cc44f508e2937c505d&user=baidu

 

简单算法遍历PspCidTable句柄表

ULONG GetPspCidTable()
{
  ULONG PspCidTable=0;
  ULONG FuncAddr=NULL;
  UNICODE_STRING FuncName={0};
  
  RtlInitUnicodeString(&FuncName,L"PsLookupProcessByProcessId");
  FuncAddr=(ULONG)MmGetSystemRoutineAddress(&FuncName);
  for (;;FuncAddr++)
  {
    if ((0x35ff==(*(PUSHORT)FuncAddr)) && (0xe8==(*(PUCHAR)(FuncAddr+6))))
    {  
      PspCidTable=*(PULONG)(FuncAddr+2);
      break;
    }  
    
  }
  return PspCidTable;
}

#define OBJECT_BODY_TO_TYPE 0x10
//从3级表开始遍历
ULONG BrowseTableL3(ULONG TableAddr)
{
  ULONG Object=0;
  ULONG ItemCount=511;

  do 
  {
    TableAddr+=8;
    Object=*(PULONG)TableAddr;
    Object&=0xfffffff8;
    
    if (Object==0)
    {
      continue;
    }
    if ((*PsProcessType)==(*(PULONG)(Object-OBJECT_BODY_TO_TYPE)))
    {
      KdPrint(("%s",PsGetProcessImageFileName((PEPROCESS)Object)));
    }    
  } while (--ItemCount>0);
  
  return 0;
}

//从二级表开始遍历
ULONG BrowseTableL2(ULONG TableAddr)
{
  do 
  {
    BrowseTableL3(*(PULONG)TableAddr);
    TableAddr+=4;
  } while ((*(PULONG)TableAddr)!=0);

  return 0;
}

//从1级表开始遍历
ULONG BrowseTableL1(ULONG TableAddr)
{
  do 
  {
    BrowseTableL2(*(PULONG)TableAddr);
    TableAddr+=4;
  } while ((*(PULONG)TableAddr)!=0);

  return 0;
}

VOID RefreshProcessByPspCidTable()
{
  ULONG PspCidTable=0;
  ULONG HandleTable=0;
  ULONG TableCode=0;
  ULONG flag=0;

  PspCidTable=GetPspCidTable();
  HandleTable=*(PULONG)PspCidTable;
  TableCode=*(PULONG)HandleTable;
  flag=TableCode&3;
  TableCode&=0xfffffffc;  
  
  switch (flag)
  {
  case 0:
    BrowseTableL3(TableCode);
    break;
  case 1:
    BrowseTableL2(TableCode);
    break;
  case 2:
    BrowseTableL1(TableCode);
    break;    
  }
  
  
}

劫持内核句柄

2009-06-17 10:42:42  www.hackbase.com  来源: 看雪
  Sysnap 2009,6  为什么需要 句柄?   句柄只是对对像的引用,当我们进入 内核时,获取 对象显然是很简单,但为什么还需要 句柄  呢? 应该说我们需要 句柄做为参数调用API. 因为直接操作 对象,可能会涉及到许多的 ...
  Sysnap 2009,6
  为什么需要 句柄?
   句柄只是对对像的引用,当我们进入 内核时,获取 对象显然是很简单,但为什么还需要 句柄
  呢? 应该说我们需要 句柄做为参数调用API. 因为直接操作 对象,可能会涉及到许多的未导
  出的东西,如果自己实现的话是不大现实,而调用标准的 内核API又很多时候依赖于 句柄,但
  又很多时候因为种种原因,我们得不到 句柄,这里我们将探讨下怎样获取一个有用的 句柄.
  任何问题欢迎指正: http://hi.baidu.com/sysnap/blog
  1 句柄的创建
  ObpCreateHandle 这个函数会判断AccessMode,如果是用户态的,那PVOID ObjectTable;
  ObjectTable = PsGetCurrentProcess()->ObjectTable
  如果是在驱动中打开 句柄,则ObjectTable = ObpKernelHandleTable;
  ObpKernelHandleTable是一个指向HANDLE_TABLE的指针,在系统中并没有导出
  接着便会ATTACH 到SYSTEM进程..
  调用ObpIncrementHandleCount增添Object引用数,这个地方我们慢点再考虑有没必要做一
  些工作.
  调用ExCreateHandle 创建 句柄,ExCreateHandle中调用
  //// 分配一个HANDLE_TABLE_ENTRY和一个 句柄,这个 句柄的值的产生是在
  ///ExpAllocateHandleTableEntry中完成的.
  ExpAllocateHandleTableEntry 是 句柄分配的核心,也涉及到了相关的数据结构.但这里我
  们可以不用管它.
  我们只需要知道ObpCreateHandle会给我们返回一和 句柄,并且会在ObjectTable新添加一
  个HANDLE_TABLE_ENTRY
  lkd> dt _HANDLE_TABLE_ENTRY
  nt!_HANDLE_TABLE_ENTRY
  +0x000 Object           : Ptr32 Void
  HANDLE_TABLE_ENTRY 就包含有我们的Object了.
  2 句柄到OBJECT的映射
  这里涉及到了 句柄表的格式,关于 句柄表,网上已经有相关的文章讨论了,这里将不再说
  typedef struct _EXHANDLE
  {
  union
  {
  struct
  {
  ULONG TagBits : 02;
  ULONG Index   : 30;
  };
  HANDLE GenericHandleOverlay;
  };
  } EXHANDLE, *PEXHANDLE;
  可以看出,一个类型为HANDLE的,其实分为俩部分,TagBits和Index,具体干什么,请看下面
  的函数
  PHANDLE_TABLE_ENTRY
  LookupHandleTableEntry(
  IN PXP_HANDLE_TABLE HandleTable,
  IN EXHANDLE         Handle
  )
  {
  ULONG i, j, k;
  PHANDLE_TABLE_ENTRY Entry = NULL;
  ULONG TableCode = HandleTable->TableCode& ~TABLE_LEVEL_MASK;
  i = (Handle.Index >> 17) &0x1FF;
  j = (Handle.Index >> 9)  &0x1FF;
  k = (Handle.Index)       &0x1FF;
  switch (HandleTable->TableCode &TABLE_LEVEL_MASK)
  {
  case 0 :
  Entry = &((PHANDLE_TABLE_ENTRY)TableCode)[k];
  break;
  case 1 :
  if (((PVOID *)TableCode)[j])
  {
  Entry = &((PHANDLE_TABLE_ENTRY *)TableCode)[j][k];
  }
  break;
  case 2 :
  if (((PVOID *)TableCode)[i])
  if (((PVOID **)TableCode)[i][j])
  {
  Entry = &((PHANDLE_TABLE_ENTRY **)TableCode)[i][j][k];
  }
  break;
  }
  return Entry;
  }
  这样的话我们就可以根据HANDLE..获取到HANDLE_TABLE_ENTRY从而得到Object
  上面的函数只适合XP和2003
  3 句柄的权限
  如果我们想修改某个 句柄的权限,可以通过HANDLE_TABLE_ENTRY::GrantedAccess
  4ObOpenObjectByPointer
  ObReferenceObjectByPointer添加计数
  ObpCreateHandle 句柄的创建
  5怎样伪造.
  比如我们想伪造一个XX.EXE进程的 句柄.
  1首先我们需要确定 ObpKernelHandleTable
  DWORD dwObpKernelHandleTable = 0;
  PVOID lpPsSystemObject = (PVOID)PsGetCurrentProcess();
  dwObpKernelHandleTable = *(DWORD*)((DWORD)lpPsSystemObject +
  gdwObjectTableOffset);
  2 ObOpenObjectByPointer 打开explorer.exe (这里随便找个没保护的进程就可以)
  获取 句柄 hProcess
  3 用某些办法获取XX.EXE 的进程 对象EPROCESS
  4 用hProcess为参数调用,LookupHandleTableEntry得到一个指向PHANDLE_TABLE_ENTRY的
  指针pEntry
  这个时候pEntry->Object应该就是 explorer.exe的EPRCESS
  5 修改pEntry->Object = XX.EXE的EPROCESS
  这样我们就完成了HANDLE和OBJECT的劫持..
  这都是主要步骤,其中有些细节问题需要注意,比如增加 对象的 句柄数啊等等.
  6 有效果吗?
  我们知道大部分 内核API都会以一个HANDLE做为参数的,其内部基本都是调用了
  ObReferenceObjectByHandle来定位 对象,我们分析下ObReferenceObjectByHandle就知道
  我们的劫持是否有用了.
  很显然ObReferenceObjectByHandle是根据 HANDLE_TABLE来把 句柄转化为 对象,过程简单
  为 handle--->> pEntry->Object
  所以劫持是成功的.
基于FPGA的数字信号处理(17)--定点运算的实现实例(饱和Saturate与四舍五入Round) 阅读详情

相关推荐

Python程序—定子故障三相永磁同步电动机振动与电流数据集

1.0 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为2.26%: 匝间短路故障,严重度为2.70%: 匝间短路故障,严重度为3.35%: 匝间短路故障,严重度为4.41%: 匝间短路故障,严重度为6.48%: 匝间短路故障,严重度为12.17%: 匝间短路故障,严重度为21.69%1.5 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为1.57%: 匝间短路故障,严重度为1.88%: 匝间短路故障,严重度为2.34%

m0_66465741的博客 1321

深入理解句柄表

设计到句柄表的有以下这些概念 HANDLE_TABLE HANDLE_TABLE结构体中的TableCode变量 实际上啊,TableCode是指向句柄表项第一个句柄表项的指针(NULL句柄表项) TableCode就是HANDLE_TABLE_ENTRY的指针 但是,当有两级以上表时,这个时候就不是了,先来搞定最简单的。 HANDLE_TABLE_ENTRY:句柄表项 对象头_OB

rongwenbin的专栏 3979

Unity插件-Mirror使用方法(一)Mirror介绍

Unity Mirror 是一个专为 Unity 引擎设计的开源、社区驱动的网络库,主要用于简化多人联机游戏的开发。它最初是为了替代 Unity 原生的 UNet 系统(已被官方弃用)而创建的,因其轻量、灵活和高效的特点,成为 Unity 开发者构建多人游戏的热门选择。

qq_44501691的博客 4100

用户句柄表的遍历

私有句柄表 _HANDLE_TABLE_ENTRY的Object直接指向_OBJECT_HEADER不用减 #include <ntifs.h> //一个页最大容纳的_HANDLE_TABLE_ENTRY #define MAX_ENTRY_COUNT (0x1000/sizeof(HANDLE_TABLE_ENTRY)) //未公开未文档化 typedef PVOID(NTAPI *OBGETOBJECTTYPE)(IN PVOID pObject); EXTERN_C NTKERNE

Mikasys的博客 785

STM32F103C8T6驱动DM542步进电机:从CubeMX配置到按键控制的全流程避坑指南

本文详细介绍了如何使用STM32F103C8T6通过CubeMX配置驱动DM542步进电机的全流程,包括PWM频率计算、GPIO模式选择及按键控制实现。重点解决了常见硬件连接错误、PWM参数配置及加减速算法优化,帮助开发者快速搭建稳定的电机控制系统。

weixin_42741930的博客 308

Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

【代码】Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

weixin_39169967的博客 4148

HANDLE-->HANDLE_TABLE_ENTRY

0

SUNE__学无止境 893

Python画好看的雷达图,全网开源代码最好看的

【代码】Python画好看的雷达图,全网开源代码最好看的。

大模型天花板 2282

应用程序如何使用驱动程序

一段写的比较好的文章,收藏用,不知道怎么用的可以看看,也可以学习下调试的一些用法 应用程序如何使用驱动 应用程序中使用 CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle 来指示驱动程序完成某种任务。比如我们在应用程序中使用 ReadFile 来让驱动读取硬件设备,我们在应用程序中使用 WriteFile 来让驱动写硬件设

Go Forward Forever! 1505

一步步带你用C#开发Modbus通信上位机(附完整代码与工程思路)

Modbus上位机开发指南(C#实现) 本文详细介绍使用C#开发Modbus上位机系统的全过程,覆盖RTU和TCP两种协议。内容包含:1)需求分析与技术选型(WinForms+NModbus4);2)分层架构设计(UI/业务/通信层);3)通信层核心代码实现(串口/以太网连接、数据读写);4)功能模块开发(设备管理、数据采集、远程控制)。提供可直接复用的Modbus RTU客户端代码示例,包含连接管理、线圈读写、寄存器操作等工业场景必备功能。通过系统化的开发流程,帮助开发者快速构建稳定可靠的Modbus监控

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 821

OpenOCD入门到精通:第 4 章 配置文件体系详解

本文深入解析OpenOCD配置文件的体系结构和工作机制。首先介绍了配置文件的搜索路径优先级和加载顺序,以及配置阶段与运行阶段的区别。然后详细分析了interface配置文件的适配器参数调优方法,包括ST-Link、CMSIS-DAP和FTDI等常见调试器的配置示例。最后重点讲解了target配置文件的核心结构,包括TAP声明、目标创建和工作区设置等关键步骤,并以stm32f1x为例展示了完整的配置流程。通过本文可以全面了解OpenOCD配置文件的分层设计理念和参数化配置方法。

从事嵌入式linux android驱动开发,拥有全栈能力 595

MMU 的资料收集

收集资料。

zw515370851的博客 280

MATLAB代码转到FPGA代码

添加完文件之后,需要设置输入的数据类型,设置完之后点击Workflow Advisor。MATLAB文件包含一个功能实现文件和测试文件。对应FPGA中的功能文件和测试文件。然后,将功能文件和测试文件添加到相应位置。然后选择APP中的HDL Coder代码。首先需要编写好MATLAB文件。点击链接,就可以查看你看到的代码。可以自己生成代码的语言类型。

小柚子的博客 3062

android适配屏幕大小,,腾讯Android开发面试记录

针对这个问题,google在Android M做了调整,不再是安装时一并询问所有权限,而是在App运行过程中,需要哪个权限再弹框询问用户是否给相应的权限,对权限做了更细地控制,让用户有了更多的可控性,但**同时也带来了另一个用户诟病的地方,那也就是权限询问的弹框的次数大幅度增多。而Android作为一个开放的开源体系,拥有非常多的开发平台,App来源甚广,因此手机的安全显得额外重要;Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志,前面提到C/S架构,

D1561691的博客 774

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

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android开发app实例,2024历年阿里Android面试真题

针对这个问题,google在Android M做了调整,不再是安装时一并询问所有权限,而是在App运行过程中,需要哪个权限再弹框询问用户是否给相应的权限,对权限做了更细地控制,让用户有了更多的可控性,但**同时也带来了另一个用户诟病的地方,那也就是权限询问的弹框的次数大幅度增多。而Android作为一个开放的开源体系,拥有非常多的开发平台,App来源甚广,因此手机的安全显得额外重要;Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志,前面提到C/S架构,

2401_84408845的博客 958

深度学习工具包 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")

字节跳动面试官:为什么-Android-要采用-Binder-作为-IPC-机制?

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!这里附上我整理的几十套腾讯、字节跳动,京东,小米,头条、阿里、美团等公司19年的Android面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。由于篇幅有限,这里以图片的形式给大家展示一小部分。

2301_79098686的博客 689

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android进程管理,有了这些中高端面试专题-大厂还会远吗?使用指南

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2020面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。

ghfgjfg679的博客 887

看完全都会了!阿里巴巴Android面试都问些什么?深度好文

前言 每年的3、4月份是各大企业为明年拓展业务大量吸纳人才的关键时期,招聘需求集中、空缺岗位多,用人单位也习惯在初秋进行大规模招聘。 金九银十,招聘旺季,也是一个求职旺季。 不打无准备的仗,在这种关键时期,各大公司的薪资待遇等信息就变得相当重要,特别是对那些刚出校门或者是第一次跳槽的朋友们,知己知彼方能百战不殆。 在国内就业环境中,以腾讯、阿里等大厂为代表的互联网公司一直都是求职者眼中的香饽饽,“大厂工作经历”相当于一块金字招牌。 今天我帮大家搜集整理了一份薪资、职级、考核、晋升条件资料,都是互联网大厂。我

fanzhang_vip0723的博客 138

android通知栏自响应事件,kotlin密封类和枚举类区别

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。BAT大厂面试题、独家面试工具包,资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取。

2401_84411939的博客 673

android开发入门基础教程含泪狂刷Android基础面试118题

1. **管道:**在创建时分配一个page大小的内存,缓存区大小比较有限;2.:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;3.:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;4.:作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;5.:常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。6.

m0_61067876的博客 875

2024年Android笔试题总结,成功入职阿里月薪45K

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

aoiushd的博客 908

为什么Flutter能最好地改变移动开发?完整PDF

前言 为什么今天突然说到学习路线,学习资料。因为最近在看知乎的时候,我看到一个大家都比较在意的一个问题,就是大家对工资和自己具备的能力是否成正比报有疑虑,所以今天这篇文章不仅仅是给大家解答这个疑虑,更多的是让大家变得更加优秀 在开始回答前,先简单概括性地说说Linux现有的所有进程间IPC方式: 1. **管道:**在创建时分配一个page大小的内存,缓存区大小比较有限; 2. 消息队列:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信; 3. 共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地

m0_57285325的博客 132

android开发基础代码,字节跳动+京东+360+网易面试题整理

1. **管道:**在创建时分配一个page大小的内存,缓存区大小比较有限;2.:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;3.:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;4.:作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;5.:常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。6.

2301_82241819的博客 793

Android Binder 原理

首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。下一步还是要查漏补缺,进行针对性复习。最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84123213的博客 598

Android面试题(window、进程、线程篇),Android开发面试技巧

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。Serializable是JAVA本身自带的序列化接口,用起来简单但开销较大Parcelable是Android中的序列化方式,使用较麻烦但效率很高Parcelable主要用作内存序列化上,而要将对象序列化到存储设备上或序列化后要通过网络传输,建议使用Serializable。

2401_84104883的博客 811

Binder相关面试总结(一):为什么Android要采用Binder作为IPC机制?

说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有。

2401_84023262的博客 1162
上一篇: Detection of the hidden processes
下一篇: “进程后2G的空间是在什么时候映射的??? ”。
tomorrowsprogress
博客等级 码龄20年 16粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值