xml地图|网站地图|网站标签 [设为首页] [加入收藏]

正规赌博平台

当前位置:网上十大正规赌博平台 > 正规赌博平台 > 趣味编程,从汇编语言看C语言的内存管理

趣味编程,从汇编语言看C语言的内存管理

来源:http://www.nb-machinery.com 作者:网上十大正规赌博平台 时间:2019-07-10 21:40

转载必须注明出处,违者必究。

本文实例讲述了php版阿里大于(阿里大鱼)短信发送实现方法。分享给大家供大家参考,具体如下:

大概就是如下一个字符串

本文试图从汇编语言的角度回答下面几个问题:

通用函数

cpu-3.0g--color-red-green-black--price-5000-8000--weight-'3-'--keywords-'levi''s'

  1. 在C语言中直接使用寄存器;
  2. C语言如何直接操作内存;
  3. C语言的内存的管理;
  4. C语言的参数传递和返回值;
  5. C语言中的可变参数传递;
// 发送大于短信 更牛逼的
  protected function sendDayuSmsPlus($tel,$type,$data) {
    $dayu_template = 'dayu_template_'.$type;
    $signname = C($dayu_template.".signname");
    $templatecode = C($dayu_template.".templatecode");
    // require LIB_PATH . 'ORG/Taobao-sdk-php/TopSdk.php';
    include_once LIB_PATH . 'ORG/Taobao-sdk-php/TopSdk.php';
    $c = new TopClient;
    $c->appkey = C('dayu_appkey');
    $c->secretKey = C('dayu_secretKey');
    $req = new AlibabaAliqinFcSmsNumSendRequest;
    $req->setSmsType("normal");
    $req->setSmsFreeSignName("{$signname}");
    if ($type == 'sold') {
      $req->setSmsParam('{"name":"'. $data['name'] .'"}');
    }
    if ($type == 'buysuccess') {
      $req->setSmsParam('{"name":"'. $data['name'] .'","product":"'. $data['product'] .'"}');
    }
    if ($type == 'newagent') {
      $req->setSmsParam('{"name":"'. $data['name'] .'"}');
    }
    $req->setRecNum("{$tel}");
    $req->setSmsTemplateCode("{$templatecode}");
    $resp = $c->execute($req);
    return $resp;
  }

要拆分成如下格式


优化

{ "cpu", "3.0g" },

 

// 发送大于短信 更牛逼的
  protected function sendDayuSmsPlus($tel,$type,$data) {
    $dayu_template = 'dayu_template_'.$type;
    $signname = C($dayu_template.".signname");
    $templatecode = C($dayu_template.".templatecode");
    // require LIB_PATH . 'ORG/Taobao-sdk-php/TopSdk.php';
    include_once LIB_PATH . 'ORG/Taobao-sdk-php/TopSdk.php';
    $c = new TopClient;
    $c->appkey = C('dayu_appkey');
    $c->secretKey = C('dayu_secretKey');
    $req = new AlibabaAliqinFcSmsNumSendRequest;
    $req->setSmsType("normal");
    $req->setSmsFreeSignName("{$signname}");
    switch($type) {
      case 'sold':
        $req->setSmsParam('{"name":"'. $data['name'] .'"}');
        break;
      case 'buysuccess':
        $req->setSmsParam('{"name":"'. $data['name'] .'","product":"'. $data['product'] .'"}');
        break;
      case 'newagent':
        $req->setSmsParam('{"name":"'. $data['name'] .'"}');
        break;
      default:
         $req->setSmsParam('{"code":"'. $data['code'] .'","product":"'. $data['product'] .'"}');
    }
    $req->setRecNum("{$tel}");
    $req->setSmsTemplateCode("{$templatecode}");
    $resp = $c->execute($req);
    return $resp;
  }

{ "color", "red", "green", "black" },

  1. C语言直接使用寄存器

    在TC中可以直接使用寄存器.

    1 main()  2 {  3     _AX = 1;  4     _BX = 1;  5     _CX = 2;  6     _AX = _BX   _CX;  7     _AH = _BL   _CL;  8 }
    

    debug之后的代码:

    图片 1

  2. C语言通过指针来直接操作内存

     1     main()   2     {   3         *(char *)0x2000 = 'a';                /* 0x2000是偏移地址 */   4         *(int *)0x2000 = 0xf;   5         *(char far *)0x20001000 = 'a';        /* 2000:1000 */   6            7         _BX = 0x2000;   8         *(char *)_BX = 'b';   9           10         *(char far *)(0x20001000   _BX) = *(char *)_AX;  11           12     }
    

    debug之后的代码:

    图片 2

  3. C语言的内存的管理

    例1:示例代码

     1     int a1, a2;                      /* 全局变量 */   2        3     void f(void);   4        5     main(void)   6     {   7         int b1, b2;                  /* 局部变量 */   8         static int s;                /* static变量 */   9         a1 = 0xa1; a2 = 0xa2;  10         b1 = 0xb1; b2 = 0xb2;  11         s = 0x1;  12     }  13       14     void f(void)  15     {  16         int c1, c2;  17         a1 = 0xfa1; a2 = 0xfa2;  18         c1 = 0xc1; c2 = 0xc2;  19     }
    

    debug之后的代码:

    图片 3

    分析代码:"

    图片 4

    总结:

    • 局部变量放在栈区,按照声明的顺序由低到高存放。
    • 静态变量和全局变量都是放在全局区,按照声明的顺序由低到高存放。
    • [补充结论], 形参也是放在栈区,也是按照声明的顺序由低到高依次存放[后面可以证明]。
  4. 参数传递和结果返回

    (1). 参数传递

     1     void f(char a, int b);   2        3     main()   4     {   5         f('a', 2);   6     }   7        8     void f(char a, int b)   9     {  10         a = 'c';  11         b = 300;  12     }
    

    图片 5

    分析代码:

    图片 6

    总结:

    • 可以看出,tc编译生成的可执行程序,形参内存的分配和释放都是由主调函数完成,上图中黑色箭头所示。
    • 主调函数调用被调函数,call的过程意味着ip入栈;然后将bp入栈(bp始终记录了这被调函数的栈顶,可以通过bp向下访问形参;向上访问局部变量);sp始终指向栈顶。
    • 栈中依次排放: …<…<-(IP) <-形参<-局部变量 <-(bp)。

       

    (2). 结果返回

     1     int f(void);   2        3     main(void)   4     {   5         int c;       6         c = f();   7     }   8        9     int f(void)  10     {  11         int a, b, sum;  12         sum = a   b;  13         return sum;  14     }
    

    debug之后

    图片 7

    分析代码:

    图片 8

    可以看出返回值是放入一个寄存器AX进行暂存的。

  5. 可变参数

    上述分析我们知道,形参可以通过BP来访问。这就为C语言使用可变参数机制va_list可以看成是对BP的抽象。

这里的require 和 include_once 还是有区别的。如果用require,重复调用方法,就会报错。Fatal error: Cannot redeclare class。改成include_once 就可以了。

{ "price", "5000", "8000" },


配置模板

{ "weight", "3-" },

<?php
return array (
 // 阿里大鱼短信配置
 'dayu_appkey'=>'xxxxxx',
 'dayu_secretKey'=>'xxxxxxxxxxxxxxxxxxxxx',
 'dayu_template_register' => array('signname'=>'注册验证','templatecode'=>'SMS_9655457'),
 'dayu_template_alteration' => array('signname'=>'变更验证','templatecode'=>'SMS_9655454'),
 'dayu_template_identity' => array('signname'=>'身份验证','templatecode'=>'SMS_9655461'),
 'dayu_template_sold'=> array('signname'=>'点多多','templatecode'=>'SMS_12800188'),
 'dayu_template_buysuccess'=> array('signname'=>'点多多','templatecode'=>'SMS_12775103'),
 'dayu_template_newagent'=> array('signname'=>'点多多','templatecode'=>'SMS_12815193'),
);

{ "keywords", "levi's" }, 

关于签名签名会显示在短信中【点多多】,只要是允许的签名,系统的或者自己审核通过的,可以混用。

原题目要求地址如下

图片 9

 

图片 10

老赵的C#语言版本如下 

图片 11

原生类

最近学C语言, 我翻译成c语言的了,在dev-c 4.9.9.2编译运行通过,代码如下

<?php
/**
 * TOP API: alibaba.aliqin.fc.sms.num.send request
 *
 * @author auto create
 * @since 1.0, 2015.12.02
 */
class AlibabaAliqinFcSmsNumSendRequest
{
  /**
   * 公共回传参数,在“消息返回”中会透传回该参数;举例:用户可以传入自己下级的会员ID,在消息返回时,该会员ID会包含在内,用户可以根据该会员ID识别是哪位会员使用了你的应用
   **/
  private $extend;
  /**
   * 短信接收号码。支持单个或多个手机号码,传入号码为11位手机号码,不能加0或 86。群发短信需传入多个号码,以英文逗号分隔,一次调用最多传入200个号码。示例:18600000000,13911111111,13322222222
   **/
  private $recNum;
  /**
   * 短信签名,传入的短信签名必须是在阿里大鱼“管理中心-短信签名管理”中的可用签名。如“阿里大鱼”已在短信签名管理中通过审核,则可传入”阿里大鱼“(传参时去掉引号)作为短信签名。短信效果示例:【阿里大鱼】欢迎使用阿里大鱼服务。
   **/
  private $smsFreeSignName;
  /**
   * 短信模板变量,传参规则{"key":"value"},key的名字须和申请模板中的变量名一致,多个变量之间以逗号隔开。示例:针对模板“验证码$[code],您正在进行${product}身份验证,打死不要告诉别人哦!”,传参时需传入{"code":"1234","product":"alidayu"}
   **/
  private $smsParam;
  /**
   * 短信模板ID,传入的模板必须是在阿里大鱼“管理中心-短信模板管理”中的可用模板。示例:SMS_585014
   **/
  private $smsTemplateCode;
  /**
   * 短信类型,传入值请填写normal
   **/
  private $smsType;
  private $apiParas = array();
  public function setExtend($extend)
  {
    $this->extend = $extend;
    $this->apiParas["extend"] = $extend;
  }
  public function getExtend()
  {
    return $this->extend;
  }
  public function setRecNum($recNum)
  {
    $this->recNum = $recNum;
    $this->apiParas["rec_num"] = $recNum;
  }
  public function getRecNum()
  {
    return $this->recNum;
  }
  public function setSmsFreeSignName($smsFreeSignName)
  {
    $this->smsFreeSignName = $smsFreeSignName;
    $this->apiParas["sms_free_sign_name"] = $smsFreeSignName;
  }
  public function getSmsFreeSignName()
  {
    return $this->smsFreeSignName;
  }
  public function setSmsParam($smsParam)
  {
    $this->smsParam = $smsParam;
    $this->apiParas["sms_param"] = $smsParam;
  }
  public function getSmsParam()
  {
    return $this->smsParam;
  }
  public function setSmsTemplateCode($smsTemplateCode)
  {
    $this->smsTemplateCode = $smsTemplateCode;
    $this->apiParas["sms_template_code"] = $smsTemplateCode;
  }
  public function getSmsTemplateCode()
  {
    return $this->smsTemplateCode;
  }
  public function setSmsType($smsType)
  {
    $this->smsType = $smsType;
    $this->apiParas["sms_type"] = $smsType;
  }
  public function getSmsType()
  {
    return $this->smsType;
  }
  public function getApiMethodName()
  {
    return "alibaba.aliqin.fc.sms.num.send";
  }
  public function getApiParas()
  {
    return $this->apiParas;
  }
  public function check()
  {
    RequestCheckUtil::checkNotNull($this->recNum,"recNum");
    RequestCheckUtil::checkNotNull($this->smsFreeSignName,"smsFreeSignName");
    RequestCheckUtil::checkNotNull($this->smsTemplateCode,"smsTemplateCode");
    RequestCheckUtil::checkNotNull($this->smsType,"smsType");
  }
  public function putOtherTextParam($key, $value) {
    $this->apiParas[$key] = $value;
    $this->$key = $value;
  }
}

图片 12图片 13代码

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

#include <stdio.h>
#include <stdlib.h>

希望本文所述对大家PHP程序设计有所帮助。

#define MAX_TOKEN_LEN  20

您可能感兴趣的文章:

  • PHP实现阿里大鱼短信验证的实例代码

const e_arg_invalid = -1; /* 错误的参数*/
const e_token_overfllow = -2;/* 数组溢出 */
const s_ok = 0;
int last_error = 0;

void* p1(char ch);
void* p2(char ch);
void* p3(char ch);
void* p4(char ch);
void* p5(char ch);

本文由网上十大正规赌博平台发布于正规赌博平台,转载请注明出处:趣味编程,从汇编语言看C语言的内存管理

关键词: mg娱乐游戏

上一篇:没有了

下一篇:没有了