C语言2-参数的传递与返回值

short plus(short x,short y,short z,short m)
{
        return x+y+z+m;
}
void main()                        //入口程序 程序开始执行的地方
{
        //调用函数
        plus(1,2,3,4);
        return;                        //执行结束
}
找到plus函数的反汇编  理解每一行汇编代码  找到参数是如何传递  返回值是如何返回的

plus函数对应反汇编代码和意义

调用函数调用:

Ubuntu下安装Transmission 挂PT 并配置域名访问

安装 Transmission

sudo apt-get install transmission-daemon

修改配置文件

先停止transmission

sudo service transmission-daemon stop

编辑

sudo vim /etc/transmission-daemon/settings.json
第14行修改为“dht-enabled”: false,
第15行是下载目录修改成你自己的“download-dir”: “/home/transmission/downloads”,
第20行修改为“encryption”: 2,
第23行修改为  "incomplete-dir": "/home/transmission/tmp",
第49行修改自定义的密码“rpc-password”: “123456”,
第52行修改成自定义的登录账号名称“rpc-username”: “transmission”,
第54行修改为“rpc-whitelist-enabled”: false,

建立文件夹和修改权限

sudo mkdir -p /home/transmission/downloads
sudo mkdir -p /home/transmission/tmp
sudo usermod -a -G transmission root
sudo chgrp -R transmission /home/transmission

检查目录用户组

VMware Fusion 10 Pro 序列号

111

VMware Fusion 10 Pro 序列号 导入虚拟机 以及下载地址

VMware Fusion 10 Mac 虚拟软件已于今年10月发布。新版的VMware Fusion 10 将兼容 macOS High Sierra,同时还支持最新 MacBook Pro 上的 Touch Bar。Fusion 10 还会改进图形性能和准确性,并采用苹果 Metal 技术。

Python 多版本共存之pyenv

经常遇到这样的情况:

  • 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性;
  • 系统自带的 Python 是 2.x,自己需要 Python 3.x;

此时需要在系统中安装多个 Python,但又不能影响系统自带的 Python,即需要实现
Python 的多版本共存。pyenv 就是这样一个 Python 版本管理器。

进制和内存

数据宽度

因为计算机受硬件制约,数据都是有长度限制的(数据宽度),超过最多宽度的数据会被丢弃

计算机中常见的数据宽度:

  1. 位(BIT) -> 一个0或1
  2. 字节(BYTE) =8位 范围 0-> FF
  3. 字(Word) = 16位 0->FFFF
  4. 双字(DoubleWord) = 32位 0-FFFFFFFF

超过范围的数会被丢弃

家里没公网ip的新选择

我的就没有。。。

我办理的联通的宽带,但是小区木有联通宽带 然后给弄的华数宽带

后来我发现华数宽带可以—多拨。。上下行都叠加

MetaTrader4 mql语法简介

WX20171016-152221@2x

基础语法

跟C++差不多 懒得讲

常用函数和内置全局变量

抓取价格数据

Ask  -- Double  当前K线(本货币)窗口买价
Bid  -- Double  当前K线(本货币)窗口卖价
MarketInfo("GBPUSD",MODE_ASK) --Double  获取指定("GBPUSD")类型货币当前买价
MarketInfo("GBPUSD",MODE_BID) --Double  获取指定("GBPUSD")类型货币当前卖价

C语言对应汇编代码

void main(){
    __asm
    {
        mov eax,eax
        mov eax,eax
        mov eax,eax
        mov eax,eax
    }
    return;
}
int plus(int x,int y)
{
    return 0;
}



--- C:\Project\2017_09_24\Main.cpp   ------------------------------------------
1:
2:    void main(){
0040D3F0   push        ebp
0040D3F1   mov         ebp,esp
0040D3F3   sub         esp,40h
0040D3F6   push        ebx
0040D3F7   push        esi
0040D3F8   push        edi
0040D3F9   lea         edi,[ebp-40h]
0040D3FC   mov         ecx,10h
0040D401   mov         eax,0CCCCCCCCh
0040D406   rep stos    dword ptr [edi]
3:        __asm
4:        {
5:            mov eax,eax
0040D408   mov         eax,eax
6:            mov eax,eax
0040D40A   mov         eax,eax
7:            mov eax,eax
0040D40C   mov         eax,eax
8:            mov eax,eax
0040D40E   mov         eax,eax
9:        }
10:       return;
11:   }
0040D410   pop         edi
0040D411   pop         esi
0040D412   pop         ebx
0040D413   add         esp,40h
0040D416   cmp         ebp,esp
0040D418   call        __chkesp (0040d430)
0040D41D   mov         esp,ebp
0040D41F   pop         ebp
0040D420   ret
--- C:\Project\2017_09_24\Main.cpp  ------------------------------------------
12:
13:   int plus(int x,int y)
14:   {
0040D470   push        ebp
0040D471   mov         ebp,esp
0040D473   sub         esp,40h
0040D476   push        ebx
0040D477   push        esi
0040D478   push        edi
0040D479   lea         edi,[ebp-40h]
0040D47C   mov         ecx,10h
0040D481   mov         eax,0CCCCCCCCh
0040D486   rep stos    dword ptr [edi]
15:       return 0;
0040D488   xor         eax,eax
16:   }
0040D48A   pop         edi
0040D48B   pop         esi
0040D48C   pop         ebx
0040D48D   mov         esp,ebp
0040D48F   pop         ebp
0040D490   ret

9.汇编-JCC

之前可以修改EIP寄存器的指令
JMP,CALL,RETN

所有JCC指令的动作->根据标志寄存器修改EIP的值

群辉dsm SVN迁移

公司买了群辉nas服务器,用来备份数据和代码
之前的svn服务器用的windows,出现过数据丢失的问题,并且不够可靠。所以迁移到了nas的svn服务器
折腾了一下午,折腾出来几个方案

Markdown 语法高亮的常用语言关键字

markdown

语言关键字
Bashbash
CoffeeScriptcoffeescript
C++cpp
C#cs
CSScss
Diffdiff
HTTPhttp
lnilni
javajava
JavaScriptjavascript
JSONjson
Markfilemarkfile
MarkDownmarkdown
Objective-Cobjectivec
Perlperl
Pythonpython
rubyruby
SQLsql
XMLxml
ARM汇编armasm
AVR汇编avrasm
MIPS汇编mipsasm
X86汇编x86asm
Erlangerlang
F#fsharp
Haskellhaskell
GLSLglsl
Lisplisp

  1. 汇编-ESP寻址 EBP寻址

寄存器传参和堆栈传参

寄存器传参

MOV ECX,1
MOV EBX,2
CALL XX
MOV EAX,ECX
ADD EAX,EBX
RETN

堆栈传参 –ESP寻址

PUSH 1
PUSH 2
CALL XXX
MOV EAX,DWORD PTR SS:[ESP+8] //当内存中括号中包含ESP或者EBP的话  用SS
ADD EAX,DWORD PTR SS:[ESP+4]
RETN 8

堆栈传参 –EBP寻址

PUSH 1
PUSH 2
CALL XXX
PUSH EBP
MOV EBP,ESP
SUB ESP,10          //提升堆栈
MOV EAX,DWORD PTR SS:[EBP+8]  //通过EBP获得参数  参数位置 +4
ADD EAX,DWPRD PTR SS:[EBP+0xC]
MOV ESP,EBP
POP EBP         //恢复堆栈

7.汇编-汇编中的函数

什么是函数

函数就是一系列指令的几个,为了完成某个会重复使用的特定功能

函数调用

  1. JMP来执行函数
  2. CALL来执行函数

函数的参数和返回值

通常情况下,会将函数的计算结果放到EAX寄存器中

5.汇编-堆栈相关指令

什么是堆栈

程序启动的时候操作系统会给每个程序一块虚拟的4G内存当程序需要使用的时候必须要和操作系统申请内存
堆栈是程序的心脏,程序中需要用到的重要数据,都在堆栈中体现

2.汇编-内存

寄存器数量和容量有限,为了存储大量数据,所以我们需要内存

  1. 每个程序都会有自己的独立的4GB内存空间(

这里的内存其实是虚拟的,并不是真的给了程序4G内存,当程序读或者写这段内存的时候,操作系统才会把使用的内存映射到物理内存上
物理内存和内存条之间还有一层映射

  1. 汇编-内存复制指令

标志寄存器 EFL

EFL是32位寄存器
其中的每一位,含义都是不同的

0x00000246 16进制
0000 0000 0000 0000 0000 0010 0100 0110 二进制

第十位(从下标开始算 从右往左):DF位
DF位为``的时候: MOVS 执行完毕之后 ESI和EDI的值会增加
DF位位1的时候: MOVS 执行完毕之后 ESI和EDI的值会减少

3.汇编-常用汇编指令

1. MOV指令(赋值)

含义:前者被后者赋值
exp:

MOV EAX,0xFFFFFFFF

此时 EAX = 0xFFFFFFFF

指令格式:

  1. MOV r/m8,r8
  2. MOV r/m16,r16
  3. MOV r/m32,r32
  4. MOV r8,r/m8
  5. MOV r16,r/m16
  6. MOV r32,r/m/32
  7. MOV r8,imm8
  8. MOV r16,imm16
  9. MOV r32,imm32

r – 通用寄存器
m – 内存
imm – 立即数
r8 – 8位通用寄存器
m8 – 8位内存
imm8 – 8位立即数