2012-09-29 Xie Jingyi
0x00 前言 早就想写一个键盘监听器了,学校的电子阅览室设了Administrator屏障,想装软件什么的很麻烦,因此想截获管理员密码。。 花了大概一个星期编写了一个,效果还不错,因此来分享一下。。 0x01 基本概念 首先解释一下什么是键盘钩子: 钩子(Hook)是Windows消息处理机制中的一个监视点,应用程序可以在这里安装一个子程序(钩子函数)以监视指定窗口某种类型的消息,所监视的窗口可以是其他进程创建的。当消息到达后,在目标窗口处理函数处理之前,钩子机制允许应用程序截获它进行处理。 SetWindowsHookEx函数可以把应用程序定义的钩子函数安装到系统中: pascal HHOOK SetWindow 继续阅读 »
2016-05-09 YongHao Hu
C++
当我们编译多个文件时, 就会有多个目标文件. 这些模块最后如何形成一个单一的程序呢? 模块间通信 链接器的由来 C/C++模块之间通信的方式有两种, 一种是模块间函数调用, 另一种是模块之间的变量访问. 在编译成目标文件的时候, 由于没有办法得知所引用的外部函数或者外部变量的地址, 所以会先置0. 所以问题本质上就是, 如何得知目标函数或者目标变量的地址呢? 继续阅读 »
2016-06-19 YongHao Hu
C++
英语是计算机的母语,是程序的母语,所以必然是程序员的母语。程序中的变量名、函数名起得好不好是决定代码质量和可维护性的最关键因素。高质量的代码应该是这样的:代码基本上是自解释的(self-explanatory),不需要太多注释,不管代码的规模有多大,具有相关知识背景的读过文档的人都可以立刻上手、立刻参与维护和开发。要想使代码能够自解释,给变量和函数起个好名字很关键,很显然,只能用英文起名字,一是用汉语拼音起名字可读性很差,二是英文单词通常比汉语更expressive(看吧,如果用汉语来说,就得说“表达能力更强”、“更有表现力”这么罗嗦),由于程序的复杂性,变量和函数往往表示一些很抽象的概念,起个既准确又简洁的名字并不容易,可是很多时 继续阅读 »
2016-12-30 Oliver Wang
其实这篇文章主要是介绍这个东西 Proposal Bind Operator 或者 bind_operator。 也是在一个很偶然的机会看到了,git 上面的一个项目用到了这个用法,为什么自己发现不了这些东西呢? 传统的 this 绑定 在函数外面暂存一个变量 js // 别名 var self = this; setTimeout(function() { this.doSomething(); }, 1000); 使用 bind 函数 & 箭头函数 在使用 class *** extends React.Component {} 的写法声明 React 组件的时候,组件的方法都不会被自动绑定 this 了,下面 继续阅读 »
2020-08-17 Robin Wen
文/Robin 橙皮书出品的第 85 期的「预言家周报」,@李画 推荐了一款产品,叫做 RoundlyX,去了解了下,挺有意思,分享给大家。 RoundlyX 是一个怎么样的产品呢?简单讲就是在你用借记卡、信用卡消费的时候,RoundlyX 会帮您自动补齐零碎。当积累的零碎达到一定的数额,会在交易所自动帮您买成加密货币。比如说您一笔消费了 $1.8,RoundlyX 会帮您积累 $0.2 凑个整。 至于为什么这个产品叫做 RoundlyX,因为 round 函数是 Excel 中的一个基本函数,作用按指定的位数对数值进行四舍五入,其他编程语言也有类似的函数实现。这个产品取名 RoundlyX,有意思吧。 注册 Round 继续阅读 »
2018-01-22 geekspeng
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。 more 创建模块 要创建模块,可创建一个.py文件,在其中包含用于完成任务的函数。 案例(保存为 mymodule.py): 继续阅读 »
2016-06-02 YongHao Hu
C++
在C语言里, 如何通过输入函数名字来调用函数? 直接上代码. 大致有三种方法: 用函数字典, 缺点是代码耦合在一起, 无法复用. ``` include include include include 继续阅读 »
2015-07-13 Eric Wang
Version:Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32 函数 可接受任意数量参数的函数 为了能让一个函数接受任意数量的位置参数,可以使用一个*参数 ```python def avg(first, *rest): return (first + sum(rest)) / (1 + len(rest)) Sample use avg(1, 2) # 1.5 avg(1, 2, 3, 4) # 2.5 `` 在这个例子中,rest`是由所有其他位置参数组成的元组。然后我们 继续阅读 »
2015-09-16 Piasy
建议:函数调用的时候,调用方传给被调用方的参数,如果在调用之后还会被修改,那么调用方应该给被调用方传一个当时的拷贝,深拷贝,否则将会导致潜在的bug: 可能被调用方是异步执行的,如果调用函数之后,参数发生了修改,那么被调用方执行的时候,看到的就是被修改之后的数据,这将导致严重、隐蔽、非必现的BUG,而这种BUG是最让人头疼的 可能被调用方会修改传入的参数,这就导致函数执行完毕之后,调用方看到的数据发生了非预期的变化,这同样会导致严重、隐蔽的BUG 继续阅读 »
2020-10-03 Robin Wen
文/Robin 最近聊到 USDT,今天聊聊唯一不会被冻结的稳定币 DAI。 USDT-ERC20 的智能合约有 2 个函数,一个是 isBlackListed,另一个是 getBlackListStatus,这两个函数组成了黑名单的核心功能。目前从 Dune Analytics 得知,共计有 98 个黑名单地址。DAI 的智能合约并没有这两个函数,也就是说你的以太坊钱包里的 ETH 和 DAI,都是不能被冻结的,除非矿工不给你打包(当然这种情况几乎不可能,有钱赚为什么要拒绝)。 DAI 是怎么来的呢?1 DAI = 1 美元,Maker 利用抵押及价格反馈制度使 DAI 稳定在 1 美元。其中,抵押品由 MKR 持有人以 继续阅读 »