char函数

moectf-re WP

雨燕双飞 提交于 2020-01-24 00:09:00
IntroducingRe 将下载的文件拉入IDA,f5运行一下: int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [esp+17h] [ebp-19h] int v5; // [esp+1Bh] [ebp-15h] int v6; // [esp+1Fh] [ebp-11h] int v7; // [esp+23h] [ebp-Dh] int v8; // [esp+27h] [ebp-9h] int v9; // [esp+2Bh] [ebp-5h] char v10; // [esp+2Fh] [ebp-1h] ​ sub_401F10(); puts("Welcome to the MoeCTF!"); v4 = 1667592045; v5 = 1148937844; v6 = 1868128048; v7 = 845897589; v8 = 1230993263; v9 = 2101297476; v10 = 0; sub_401500((char *)&v4); return system("pause"); } 根据(char *)考虑v4开始v10结束的应该是一串字符串,使用快捷键‘R’将其转换成字符,即 得到flag:moectf{D0_You_k2ow

2.列表字符串字典元组集合

帅比萌擦擦* 提交于 2020-01-23 21:56:16
list: 增:list.append("str") 追加str到list最后 插入:list.insert(num,"str") 在list的num位置插入str 修改:list[num] = "str" 把list的第num位置改为str 把另一个列表元素添加进来: list.extend(list2) #list = [list[0],list[1],...list[-1],list2[0],list2[1]] 删: (1)list.remove("str") 删除list列表中str的元素 (2)del list[num] 删除list列表中位置为num的元素 (3)list.pop() 弹出list的最后一个元素,并把最后一个元素返回,这时可以用一个变量接收,如: str = list.pop() list弹出最后一个元素,并赋值给str 如果带下标,如list.pop(num) list弹出num位置的元素,并返回 (4)list.clear() 清空list中所有内容 查 num = list.index("str") list查找一个值为str的元素,并将下标返回,用于查找已知元素的位置 str = list[num] 把list中num位置的元素返回,查找用于已知位置的元素的值 统计 num = list.count("str")

C++ 异步IO (一) 阻塞式HTTP客户端

风格不统一 提交于 2020-01-23 18:30:24
An IO call is synchronous if, when you call it, it does not return until the operation is completed, or until enough time has passed that your network stack gives up. 简单来说,IO的函数后面的代码不会被执行,除非IO函数已返回,或函数超时了。 /* For sockaddr_in */ #include <netinet/in.h> /* For socket functions */ #include <sys/socket.h> /* For gethostbyname */ #include <netdb.h> #include <unistd.h> #include <string.h> #include <stdio.h> int main(int c, char **v) { const char query[] = "GET / HTTP/1.0\r\n" "Host: www.baidu.com\r\n" "\r\n"; const char hostname[] = "www.baidu.com"; struct sockaddr_in sin; struct hostent *h; const

名字与地址转换(摘抄自网络)

▼魔方 西西 提交于 2020-01-23 18:23:23
一、gethostbyname()函数说明——用域名或主机名获取IP地址 包含头文件 #include <netdb.h> #include <sys/socket.h> 函数原型 struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。 返回hostent结构体类型指针 hostent->h_name 表示的是主机的规范名。例如www.google.com的规范名其实是www.l.google.com。 hostent->h_aliases 表示的是主机的别名.www.google.com就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。 hostent->h_addrtype 表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是pv6(AF_INET6) hostent->h_length 表示的是主机ip地址的长度 hostent->h_addr_lisst 表示的是主机的ip地址,注意,这个是以网络字节序存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话

第七周作业

故事扮演 提交于 2020-01-23 13:26:01
本周作业头 基础作业 每个单词的最后一个字母改成大写 (10 分) 函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 函数接口定义: void fun( char *p ); 其中 p 是用户传入的参数。函数将 p所指字符串中每个单词的最后一个字母改成大写。 裁判测试程序样例: #include <stdio.h> void fun( char *p ); int main() { char chrstr[64]; int d ; gets(chrstr); d=strlen(chrstr) ; chrstr[d] = ' ' ; chrstr[d+1] = 0 ; fun(chrstr); printf("\nAfter changing: %s\n", chrstr); return 0; } /* 请在这里填写答案 */ 输入样例: my friend is happy 输出样例: After changing: mY frienD iS happY 实验代码 void fun (char *p) { int i,n; n=strlen(p); for (i=0;i<n;i++) { if(p[i]==' '){ p[i-1]=p[i-1]-32; } } } 设计思路 遇到的问题 指针运用不恰当 解决方法

sprintf函数

浪尽此生 提交于 2020-01-23 13:01:03
  sprintf 是个变参函数,定义如下:     int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的 格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终 函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" 可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567" 当然也可以左对齐: sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567" 也可以按照16 进制打印: sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置

QT分析之网络编程

≡放荡痞女 提交于 2020-01-23 03:49:54
原文地址:http://blog.163.com/net_worm/blog/static/127702419201002842553382/ 首先对Windows下的网络编程总结一下: 如果是服务器,其WinSDK调用分别为: 1 WSAStartup() -> socket() -> htons() / htonl() -> bind() -> listen() -> accept() -> recv() / send() -> closesocket() -> WSACleanup() 如果是客户端程序,其调用序列为: 1 WSAStartup() -> socket() -> htons() / htonl() -> connect() -> recv() / send() -> closesocket() -> WSACleanup() 前面转贴的客户端(WinSocket温习)程序中,收到信息就在console打印出来然后退出了;在一般的应用中,通常是要一直等待收发消息的,直到程序确认退出才关闭socket。如果用一个轮询就会占用很多的CPU资源,所以很多嵌入式设计中会用一个WaitForMultiObject调用,等待退出命令或者超时,然后退出或进行下一轮信息接受。在Windows平台下也有一些比较高明的设计,使用异步socket,然后用异步选择的办法

(C/C++)扩展String类

馋奶兔 提交于 2020-01-23 03:21:46
扩展String类 题目:扩展String类,引入头文件CString.h,它的内容如下: #include using namespace std; class String{ protected: char *mystr; int len; public: String(const char *p){ len = strlen§; mystr = new char[len+1]; strcpy(mystr,p); } ~String(){ if (mystr !=NULL) { delete []mystr; mystr = NULL; len = 0; } } void showStr(){cout <<mystr;} char * GetStr(){return mystr;} virtual bool IsSubString(const char *str){ int i,j; for (i =0;i<len;i++) { int k = i; for (j =0;str[j] !=’\0’;j++,k++) { if (str[j]!= mystr[k]) break; } if(str[j] ==’\0’) return true; } return false; } }; class EditString:public String{ public:

SQLServer基本函数

百般思念 提交于 2020-01-23 02:40:50
1.字符串函数 : 字符操作类 : upper(char_expr) 转为大写 lower(char_expr) 转为小写 UCase(string) 返回 Variant (String),其中包含转成大写的字符串。 LCase(string) 返回字符串的小写形式。 space(int_expr) 生成int_expr个空格 replicate(char_expr,int_expr) 复制字符串int_expr次 reverse(char_expr) 反转字符串 stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从 start开始的length个字符用char_expr2代替 ltrim(char_expr) rtrim(char_expr) 去掉空格 ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符 字符串查找 : charindex(char_expr,expr ession) 返回char_expr的起始位置 patindex("%pattern%",expr ession) 返回指定模式的起始位置,否则为0 locate(substr,str,pos) 返回子串substr在字符串str第一个出现的位置 2.数学函数 abs(numeric_expr)

如何保护你的 Python 代码 (一)—— 现有加密方案

独自空忆成欢 提交于 2020-01-23 00:33:08
https://zhuanlan.zhihu.com/p/54296517 0 前言 去年11月在PyCon China 2018 杭州站分享了 Python 源码加密 ,讲述了如何通过修改 Python 解释器达到加解密 Python 代码的目的。然而因为笔者拖延症发作,一直没有及时整理成文字版,现在终于战胜了它,才有了本文。 本系列将首先介绍下现有源码加密方案的思路、方法、优点与不足,进而介绍如何通过定制 Python 解释器来达到更好地加解密源码的目的。 由于 Python 的动态特性和开源特点,导致 Python 代码很难做到很好的加密。社区中的一些声音认为这样的限制是事实,应该通过法律手段而不是加密源码达到商业保护的目的;而还有一些声音则是不论如何都希望能有一种手段来加密。于是乎,人们想出了各种或加密、或混淆的方案,借此来达到保护源码的目的。 常见的源码保护手段有如下几种: 发行 .pyc 文件 代码混淆 使用 py2exe 使用 Cython 下面来简单说说这些方案。 1 发行 .pyc 文件 1.1 思路 大家都知道,Python 解释器在执行代码的过程中会首先生成 .pyc 文件,然后解释执行 .pyc 文件中的内容。当然了,Python 解释器也能够直接执行 .pyc 文件。而 .pyc 文件是二进制文件,无法直接看出源码内容。如果发行代码到客户环境时都是