python游戏csgo开挂_Python64位游戏读写--GTA锁血

37.jpg (19.22 KB, 下载次数: 1)

2020-6-23 09:32 上传

EPIC送了GTA5,最近考完试和朋友一起玩了下,由于刚开始,等级低,朋友带我打任务的时候,完全就打不过,我的甲没几下就爆了,刚开始没什么。

但是今天去打末日3的时候,由于只有两个人,玩过的都知道,末日3是需要一个人去玩小游戏,然后其他人保护玩小游戏那个队友,末日3的NPC是会一直刷,怎么打都打不完,有一瞬间就变成了CSGO练爆头模式,完全没得打(打不过就充钱,没得充钱就变强)。后面搜了搜,发现别人歪瓜的截图,有锁血功能,就想去了解一下。

打开GTAV,进入故事模式。GTAV官方在故事模式中,有给出作弊代码,其中有一个无敌五分钟的命令。从这个命令入手,查找他的基址,没准能用。

作弊代码:PAINKILLER

搜索思路

👇

开启无敌时候,可能会有数值增加,可能有一个数值或者开关,会变为1。这时搜索增加的数值

关闭无敌时候,可能会有数值减少,可能有一个数值或者开关,会变为0。这时搜索减少的数值

开启无敌时候,可能会有数值减少,可能有一个数值或者开关,某个数值减少。这时搜索减少的数值

关闭无敌时候,可能会有数值减少,可能有一个数值或者开关,某个数值增加。这时搜索增加的数值

👆

搜索基址

36.jpg (1.32 KB, 下载次数: 1)

2020-6-23 09:32 上传

CE加载GTA5,先通过常规思路,无敌搜增加,关闭搜减少。

1.png (67.14 KB, 下载次数: 2)

2020-6-23 09:32 上传

即使这游戏是64位的,但是依然扫4字节就够了。首先先扫一次未知的初始值。

2.png (58.27 KB, 下载次数: 2)

2020-6-23 09:32 上传

进入GTA,按~键,输入作弊代码PAINKILLER

3.png (944.94 KB, 下载次数: 2)

2020-6-23 09:32 上传

输入成功时候,右下角会有无敌时间,正常为五分钟。

4.png (1.11 MB, 下载次数: 1)

2020-6-23 09:33 上传

这时候去CE搜索增加的数值

5.png (59.15 KB, 下载次数: 2)

2020-6-23 09:33 上传

由于游戏很大,所以第一次搜增加的时候,会很卡,而且会扫很久,我的电脑要扫大概两分半钟,而且内存会被吃满

19.png (11.51 KB, 下载次数: 1)

2020-6-23 09:31 上传

而且扫的次数多了,会产生很多临时文件

20.png (10.11 KB, 下载次数: 1)

2020-6-23 09:32 上传

像我这样,C盘直接没位置了,所以建议备一个清理C盘的软件。时不时清理临时文件

看会小说或者刷会短视频,等扫描结果出来以后,就再次输入作弊代码,就可以将无敌关闭(我一开始不知道,傻傻得等了五分钟)。

如何查看是否关闭,看右下角的倒计时是否存在。如果没了,那就是关闭了。

这时候搜索减少的数值。

7.png (74.6 KB, 下载次数: 1)

2020-6-23 09:33 上传

步骤循环,等结果少于5000的时候。就可以通过搜索未变动的数值,来开始查找最终的基址。

8.png (77.15 KB, 下载次数: 2)

2020-6-23 09:33 上传

9.png (77.76 KB, 下载次数: 1)

2020-6-23 09:31 上传

10.png (72.52 KB, 下载次数: 1)

2020-6-23 09:31 上传

快捷键,CTRL+D,可以快速查看该地址反汇编地址。

因为我搜索过很多次,所以认得特征,当反汇编窗口的代码,是以下这串时候,我就知道找到了

or [rax],al

12.png (29.89 KB, 下载次数: 1)

2020-6-23 09:31 上传

为什么了,因为这个al在线上模式时候,他是0或者1,0就是关闭无敌,1就是开启无敌。

一开始我怎么找到这个的了,我当时扫了很多次,发现有一次,他的值不是al,而是0,然后当我开启无敌时候,他就变为1了。我就把它认住了。发现有的时候在线下模式,他就是会这样,抽风。

关闭无敌的默认初始值是:4194316

当你把他的数值改为这个初始值时,他这个al就会变为0

13.png (99.08 KB, 下载次数: 1)

2020-6-23 09:31 上传

但是即使你把它改了,他还是会变,有时候会变为12,有时候会变很大的数,但是你测试一下,将00改为01时候,在去做一些扣血的行为时候,是不会扣血的,达到了无敌的效果。

基址找到了,那就开始找他的静态基址。

一开始尝试过一步一步找,然后发现,扫出来的基址过多,比较麻烦,所以后面决定使用指针搜索

14.png (27.12 KB, 下载次数: 3)

2020-6-23 09:31 上传

我这里没调参数,直接确定了。

15.png (56.32 KB, 下载次数: 2)

2020-6-23 09:31 上传

最后扫出来的结果,有9419539个,观察他的值,值等于初始值4194316或等于基址目前的值的时候,就把它双击,添加到地址表中。

16.png (79.18 KB, 下载次数: 1)

2020-6-23 09:31 上传

17.png (103.25 KB, 下载次数: 1)

2020-6-23 09:31 上传

一定要选多几个,因为进入线上模式时候,值会变,有的会变成?号,有的是不知道啥值,所以要选多几个加以观察,或者不关闭指针扫描结果窗口。

18.png (1.12 MB, 下载次数: 1)

2020-6-23 09:31 上传

最终我找出来的基址

"GTA5.exe"+02D06110 +28+298+c8+a8+188五层偏移。

38.jpg (8.33 KB, 下载次数: 1)

2020-6-23 09:32 上传

代码编写

40.jpg (1.92 KB, 下载次数: 1)

2020-6-23 09:32 上传

游戏是64位的,所以要用64位的函数。

WOW64 函数

[b]ZwWow64QueryInformationProcess64

ZwWow64ReadVirtualMemory64

ZwWow64WriteVirtualMemory64

ZwWow64CallFunction64

32位程序几乎可以获取64位程序的全部函数调用功能。

首先导入函数

基本操作都没啥不同的。

# -*- coding:utf-8 -*-

"""

@author:

@file: GTA.py

@time: 2020-06-21 13:49

@desc: KeyboArd

"""

import win32process#进程模块

import win32api#主要用来注册热键

import ctypes#C语言类型

from win32gui import FindWindow#界面

from ctypes import c_long , c_int , c_void_p, windll, WinDLL, c_ulonglong, byref

初始化

ntdll = WinDLL("ntdll.dll")#调用ntdll库

kernel32 = ctypes.windll.LoadLibrary("kernel32.dll")#调用kernel32库

GetLastError = kernel32.GetLastError#调用GetLastError函数

GTA = 0x7FF79B5D0000#GTA.EXE的基址,原本是打算通过模块名字获取的,但是不知道为什么返回-1.可能是64位游戏,涉及到一些权限问题,后面在研究一下,目前主要是为了达到目的。

STANDARD_RIGHTS_REQUIRED = 0x000F0000#这两个的值,是在C++那里获取过来的。

SYNCHRONIZE = 0x00100000#看图

PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)#看图

class PROCESS_BASIC_INFORMATION(ctypes.Structure):

_fields_ = [('ExitStatus', ctypes.c_ulonglong),     # 接收进程终止状态

('PebBaseAddress', ctypes.c_ulonglong),  # 接收进程环境块地址

('AffinityMask', ctypes.c_ulonglong),  # 接收进程关联掩码

('BasePriority', ctypes.c_ulonglong),  # 接收进程的优先级类

('UniqueProcessId', ctypes.c_ulonglong),  # 接收进程ID

('InheritedFromUniqueProcessId', ctypes.c_ulonglong)]  # 接收父进程ID

## OpenProcess

OpenProcess = windll.kernel32.OpenProcess

OpenProcess.argtypes = [c_void_p, c_int, c_long]

OpenProcess.rettype = c_long

## CloseHandle

CloseHandle = windll.kernel32.CloseHandle

CloseHandle.argtypes = [c_void_p]

CloseHandle.rettype = c_int

def _GetProcessId(className,windowName):

hGameWindow = FindWindow(className, windowName)

pid = win32process.GetWindowThreadProcessId(hGameWindow)[1]

return pid

def _GetPorcessHandle(pid):

hGameHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)

return hGameHandle

ProcessId = _GetProcessId("grcWindow", u"Gra***** A****V")

_hGameHandle = _GetPorcessHandle(ProcessId)

23.png (5.29 KB, 下载次数: 1)

2020-6-23 09:32 上传

24.png (9.54 KB, 下载次数: 1)

2020-6-23 09:32 上传

对64位内存读操作

def _ReadMemeryLong64(addr, bufflength):

addr = c_ulonglong(addr)#64位游戏,我测试过,如果只写c_ulong() 会报错,说有冲突。

ret = c_ulonglong()#所以这里也都保持同样的长度把

BufferLength = c_ulonglong(bufflength)

ntdll.ZwWow64ReadVirtualMemory64(int(_hGameHandle), addr, byref(ret), BufferLength, 0)#ZwWow64ReadVirtualMemory64和ReadProcessInt 这个函数操作类似。

return ret.value

64位通过模块名获取基址

def GetBaseAddr(ModuleName):  #这是论坛里一位大佬写的,为了方便快捷,先复制粘贴过来,这代码我也没看懂,好像涉及到了pe知识,后面自己在 写一个。

# 传入需要查找的模块的名称,就可以返回相应的模块基址了

NumberOfBytesRead = c_ulong()

Buffer = PROCESS_BASIC_INFORMATION()

Size = c_ulong(48)

name_len = len(ModuleName)

ntdll.NtWow64QueryInformationProcess64(int(_hGameHandle), 0, byref(Buffer), Size,

byref(NumberOfBytesRead))

"""

这同样是一个未公开的api,可以通过他获取进程的信息,然后存入我们一开始定义的结构体中,他的五个参数分别是:

进程句柄,信息类型,缓冲指针,以字节为单位的缓冲大小, 写入缓冲的字节数

而至于下面为什么要这么写,其实涉及到了程序的PE结构,这里不做赘述,因为这个东西不是一会会说的清楚的,可以自行百度

"""

ret = _ReadMemeryLong64(Buffer.PebBaseAddress + 24, 8)

ret = _ReadMemeryLong64(ret + 24, 8)

for i in range(100000):  # 这里用for循环其实是怕程序卡死,下面如果出了问题不能退出的话,循环结束一样可以退出

modulehandle = _ReadMemeryLong64(ret + 48, 8)

if modulehandle == 0:

break

nameaddr = _ReadMemeryLong64(ret + 96, 8)

name = ReadProcessMemory64_Wchar(nameaddr, name_len * 2 + 1, name_len)

if name == ModuleName:

return modulehandle

ret = _ReadMemeryLong64(ret + 8, 8)

对找到的基址进行读取

def get_invincible(hGameHandle):

#"GTA5.exe"+02D06110 +28+298+c8+a8+188  这是找到的基址

value = GTA+ 0x02D06110#GTA的基址等于0x7FF79B5D0000 ,如果重启了电脑,这个基址会变,所以一定要写64位通过模块名读取基址。

value1 = _ReadMemeryLong64(value,8)#先读取一下"GTA5.exe"+02D06110的基址。看下是否正确。

value2 = _ReadMemeryLong64(value1+0x28,8)

value3 = _ReadMemeryLong64(value2+0x298,8)

value4 = _ReadMemeryLong64(value3+0xc8,8)

value5 = _ReadMemeryLong64(value4+0xa8,8)

value6 = _ReadMemeryLong64(value5+0x188,8)

# #value1 = value++0x28+0x298+0xc8+0xa8+0x188

print("0x%08X"%value2)

print(value)

return value5

value:"GTA5.exe"+02D06110

25.png (78.12 KB, 下载次数: 1)

2020-6-23 09:32 上传

value1:GTA5.exe"+02D06110

26.png (70.27 KB, 下载次数: 1)

2020-6-23 09:32 上传

value2:GTA5.exe"+02D06110+0x28

27.png (77.8 KB, 下载次数: 1)

2020-6-23 09:32 上传

value3:GTA5.exe"+02D06110+0x28+0x298

28.png (84.75 KB, 下载次数: 1)

2020-6-23 09:32 上传

value4:GTA5.exe"+02D06110+0x28+0x298+0XC8

29.png (86.95 KB, 下载次数: 1)

2020-6-23 09:32 上传

value5:GTA5.exe"+02D06110+0x28+0x298+0XC8+0xa8

30.png (90.96 KB, 下载次数: 1)

2020-6-23 09:32 上传

value6:GTA5.exe"+02D06110+0x28+0x298+0XC8+0xa8+0x188

31.png (87.45 KB, 下载次数: 1)

2020-6-23 09:32 上传

成功读取到该值,为什么这么写,因为一开始我直接省略麻烦,写一堆,发现读的都是什么东西,太乱了。这样子容易找到问题。

64位写操作

def WriteMemeryLong64(addr, bufflength, n):

addr = c_ulonglong(addr)

ret = c_ulonglong(bufflength)

BufferLength = c_ulonglong(n)

ntdll.ZwWow64WriteVirtualMemory64(int(_hGameHandle), addr, byref(ret), BufferLength, 0)##写法也跟WriteProcessMemory这个函数相似

无敌

初始:4194316

无敌:4194572

def set_invincible(hGameHandle,address):

while True:

WriteMemeryLong64(hGameHandle,address+0x188,4194572,4)#开启无敌

if(win32api.GetAsyncKeyState(35)!=0):#当按下END键,就关闭无敌,将值写回正常

WriteMemeryLong64(hGameHandle, address + 0x188, 4194316, 4)#关闭无敌

CloseHandle(hGameHandle)#关闭句柄

exit(0)#退出程序

开启:

32.png (131.14 KB, 下载次数: 1)

2020-6-23 09:32 上传

关闭:

33.png (140.73 KB, 下载次数: 1)

2020-6-23 09:32 上传

完整代码

# -*- coding:utf-8 -*-

"""

@author:

@file: GTA.py

@time: 2020-06-21 13:49

@desc: KeyboArd

"""

import win32process#进程模块

import win32api#主要用来注册热键

import ctypes#C语言类型

from win32gui import FindWindow#界面

from ctypes import c_long , c_int , c_void_p, windll, WinDLL, c_ulonglong, byref,Structure,c_char,POINTER,sizeof,pointer,c_ulong,c_wchar_p

ntdll = WinDLL("ntdll.dll")

kernel32 = ctypes.windll.LoadLibrary("kernel32.dll")

GetLastError = kernel32.GetLastError

#GTA = 0x7FF79B5D0000

STANDARD_RIGHTS_REQUIRED = 0x000F0000

SYNCHRONIZE = 0x00100000

PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)

class PROCESS_BASIC_INFORMATION(ctypes.Structure):

_fields_ = [('ExitStatus', ctypes.c_ulonglong),     # 接收进程终止状态

('PebBaseAddress', ctypes.c_ulonglong),  # 接收进程环境块地址

('AffinityMask', ctypes.c_ulonglong),  # 接收进程关联掩码

('BasePriority', ctypes.c_ulonglong),  # 接收进程的优先级类

('UniqueProcessId', ctypes.c_ulonglong),  # 接收进程ID

('InheritedFromUniqueProcessId', ctypes.c_ulonglong)]  # 接收父进程ID

## OpenProcess

OpenProcess = windll.kernel32.OpenProcess

OpenProcess.argtypes = [c_void_p, c_int, c_long]

OpenProcess.rettype = c_long

## CloseHandle

CloseHandle = windll.kernel32.CloseHandle

CloseHandle.argtypes = [c_void_p]

CloseHandle.rettype = c_int

def _GetProcessId(className,windowName):

hGameWindow = FindWindow(className, windowName)

pid = win32process.GetWindowThreadProcessId(hGameWindow)[1]

return pid

def _GetPorcessHandle(pid):

hGameHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)

return hGameHandle

ProcessId = _GetProcessId("grcWindow", u"G*********o V")

_hGameHandle = _GetPorcessHandle(ProcessId)

def _ReadMemeryLong64(addr, bufflength):

addr = c_ulonglong(addr)

ret = c_ulonglong()

BufferLength = c_ulonglong(bufflength)

ntdll.ZwWow64ReadVirtualMemory64(int(_hGameHandle), addr, byref(ret), BufferLength, 0)

return ret.value

def WriteMemeryLong64(addr, bufflength, n):  #

addr = c_ulonglong(addr)

ret = c_ulonglong(bufflength)

BufferLength = c_ulonglong(n)

ntdll.ZwWow64WriteVirtualMemory64(int(_hGameHandle), addr, byref(ret), BufferLength, 0)

def ReadProcessMemory64_Wchar(addr, n,length):#这个函数用以读取模块名称,与ReadVirtualMemory64不同的点还有一个是我们会传入一个缓冲区的长度length,用于定义一个c_wchar_p的缓冲区

addr = c_ulonglong(addr)

ret = c_wchar_p("0" * length)#这里选用wchar其实与编码有关,感兴趣的同学自行百度wchar,宽字符等关键字学习

BufferLength = c_ulonglong(n)

ntdll.NtWow64ReadVirtualMemory64(int(_hGameHandle), addr, ret, BufferLength, 0)

return ret.value

def GetBaseAddr(ModuleName):  #

# 传入需要查找的模块的名称,就可以返回相应的模块基址了

NumberOfBytesRead = c_ulong()

Buffer = PROCESS_BASIC_INFORMATION()

Size = c_ulong(48)

name_len = len(ModuleName)

ntdll.NtWow64QueryInformationProcess64(int(_hGameHandle), 0, byref(Buffer), Size,

byref(NumberOfBytesRead))

"""

这同样是一个未公开的api,可以通过他获取进程的信息,然后存入我们一开始定义的结构体中,他的五个参数分别是:

进程句柄,信息类型,缓冲指针,以字节为单位的缓冲大小, 写入缓冲的字节数

而至于下面为什么要这么写,其实涉及到了程序的PE结构,这里不做赘述,因为这个东西不是一会会说的清楚的,可以自行百度

"""

ret = _ReadMemeryLong64(Buffer.PebBaseAddress + 24, 8)

ret = _ReadMemeryLong64(ret + 24, 8)

for i in range(100000):  # 这里用for循环其实是怕程序卡死,下面如果出了问题不能退出的话,循环结束一样可以退出

modulehandle = _ReadMemeryLong64(ret + 48, 8)

if modulehandle == 0:

break

nameaddr = _ReadMemeryLong64(ret + 96, 8)

name = ReadProcessMemory64_Wchar(nameaddr, name_len * 2 + 1, name_len)

if name == ModuleName:

return modulehandle

ret = _ReadMemeryLong64(ret + 8, 8)

def get_invincible(hGameHandle,GTA):

#"GTA5.exe"+02D06110 +28+298+c8+a8+188

value = GTA+ 0x02D06110

value1 = _ReadMemeryLong64(value,8)#先读取一下"GTA5.exe"+02D06110的基址。看下是否正确。

value2 = _ReadMemeryLong64(value1+0x28,8)

value3 = _ReadMemeryLong64(value2+0x298,8)

value4 = _ReadMemeryLong64(value3+0xc8,8)

value5 = _ReadMemeryLong64(value4+0xa8,8)

value6 = _ReadMemeryLong64(value5+0x188,8)

#value1 = value++0x28+0x298+0xc8+0xa8+0x188

# print("0x%08X"%value6)

print(value6)

return value5

def set_invincible(hGameHandle,address):

while True:

WriteMemeryLong64(address+0x188,4194572,4)#开启无敌

if(win32api.GetAsyncKeyState(35)!=0):

WriteMemeryLong64(address + 0x188, 4194316, 4)#关闭无敌

CloseHandle(hGameHandle)

exit(0)

def main():

moudle = GetBaseAddr("****5.exe")

invincible = get_invincible(_hGameHandle, moudle)

#print("0x%08X" % moudle)

#print(moudle)

#print("0x%08X" % modulename)

set_invincible(_hGameHandle,invincible)

CloseHandle(_hGameHandle)

if __name__ == '__main__':

main()

34.png (1.63 MB, 下载次数: 0)

2020-6-23 09:32 上传

35.jpg (4.38 KB, 下载次数: 1)

2020-6-23 09:32 上传

39.jpg (724 Bytes, 下载次数: 0)

2020-6-23 09:32 上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

log4j2 的使用【超详细图文】

log4j2 的使用 Apache Log4j2 是对Log4j 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有: 异常处理,在logback中,Appender中的异常不会被应…

python标准库os的方法listdir_Python 标准库 os 中的方法 listdir() 返回包含指定路径中所有文件和文件夹名称的列表。_药理学答案_学小易找答案...

【单选题】下列( )是脂肪酸 (2.0分)【单选题】关于固醇类的叙述,错误的是( ) (2.0分)【单选题】细胞膜的主动转运( ) (2.0分)【单选题】脂肪的碱水解作用又称为( ) (2.0分)【名词解释】比活力【简答题】4、什么是米氏方程,米氏常数 Km 的意义是什么?试求酶反应速度达到最大反应…

JS遍历数组的12种方法

一、 for 普通版 for (let i 0; i < arr.lengthl; i) {// ... }优化版 // 使用临时变量&#xff0c;将长度缓存起来&#xff0c;避免重复获取数组长度&#xff0c;当数组较大时优化效果才会比较明显。 let len arr.length; for (let i 0; i < len; i) {// ... }for…

Log4j2突发重大漏洞

长话短说吧。 相信大家已经被 Log4j2 的重大漏洞刷屏了&#xff0c;估计有不少小伙伴此前为了修 bug 已经累趴下了。很不幸&#xff0c;我的小老弟小二的 Spring Boot 项目中恰好用的就是 Log4j2&#xff0c;版本特喵的还是 2.14.1&#xff0c;在这次漏洞波及的版本范围之内。…

不改变原数组的一些方法

改变原数组 push / pop / shift / unshift / sort / reverse / splice 不改变原数组 concat / join --> split / toString / slice 一、 concat — 数组合并 var arr [1, 2, 3]; var arr1 [4, 5, 6]; console.log(arr.concat(arr1)); // [1, 2, 3, 4, 5, 6];二、 toStri…

python描述对象静态特性的数据为_对于需要几个单位共同负担的一张原始凭证上的支出,应根据其他单位负担部分为其提高( )。...

【单选题】字符串s是一个字符序列,以下表示s从右侧向左第三个字符的是: ‪‪‪‫‪‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪【多选题】我国《婚姻法》规定夫妻人身关系的内容包括 ( )【填空题】白露横江【多选题】我国《婚姻法》规定的婚姻成立的实质…

PageHelper分页插件源码及原理剖析

摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件。 PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件&#xff0c;其实我并不想加上好用两个字&#xff0c;但是为了表扬插件作者开源免费的崇高精神&#xff0c;我毫不犹豫…

arguments 类数组

一、类数组&#xff1a;长得像数组&#xff0c;可以拿它当数组用&#xff0c;但它不是数组 可以利用属性名模拟数组的特性可以动态的增长 length 的属性如果强行让类数组调用 push 方法&#xff0c;则会根据 length 属性值的位置进行属性的扩充 二、不能往类数组里面添加东西…

净网大师最好用旧版本_云顶之弈手把手教你吃分系列:决斗大师

很忏愧&#xff0c;这个阵容并非我原创&#xff0c;也是我偷师而来&#xff0c;不过最近一直在用&#xff0c;效果也不错&#xff0c;所以主要会讲讲心得&#xff0c;而不是原先的基础。先看阵容构成&#xff1a;亚索(天选决斗大师)、剑姬、武器、风女、卡莉斯塔/赵信、慎、永恩…

PageHelper 关闭COUNT(0)查询 以及PageHelper 的分页原理分析

pagehelper 关闭count(0)查询 以及pagehelper的分页原理分析 情景再现&#xff1a;在给移动端提供分页查询数据接口时&#xff0c;知道他们不需要总条数。但是使用pagehelper 分页查询打印的sql总是会查询两次&#xff0c;先统计条数&#xff0c;在进行列表查询。对于有点强迫…

local service system账户_systemd.service学习和使用总结

公众号&#xff1a;暮北林 Q Q 群 : 一起学前端Systemd Service 学习和使用总结什么是Systemd servicesystem就是系统,d的意思是daemon,systemd就是系统守护进程,守护系统级的服务.我的个人理解就是管理系统服务的工具,可以对系统服务做一些操作,如:启动、结束、重启等,这里我…

js 函数参数

函数有了参数才变得强大。 一、参数规则 形参比实参多&#xff0c;多的形参赋值undefined 实参比形参多&#xff0c;有多少形参就对应赋多少实参&#xff0c;其余的放到 arguments arguments[] 是一个类数组 – 实参列表 // 形式参数 -- 形参 -- 用来占位的 function fun(a,…

MySQL中OR和AND的区别是什么____MySQL中or与in

MySQL中OR和AND的区别是什么 区别如下&#xff1a; 1、or就是’或’得意思&#xff0c;只要其中一个条件成立就可以了&#xff1b; 2、and就是’与’得意思&#xff0c;并列&#xff0c;两个条件要都成立。 简明的说&#xff1a;and必须满足所有条件&#xff1b;or满足一个…

stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法

一、mbedtls 开源库1. mbedtls是什么Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语&#xff0c;X.509证书操作以及SSL / TLS和 DTLS 协议&#xff0c;它的代码占用空间小&#xff0c;非常适合用于嵌入式系统。mbedtls遵循 Apache 2.0 开源许可协…

函数的结束条件和返回值 — return

一、当做返回值 function sum(a, b) {return a b; }sum(1, 2); // 3二、作为函数的终止条件 函数遇到 return 就会停止 function sum(a, b) {console.log(a);return; // 如果 return 写在这里&#xff0c;后面的语句通通不会执行console.log(b); }sum(1, 2);输入数字&#x…

java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

java面试题&#xff1a;当一个对象被当作参数传递到一个方法后&#xff0c;此方法可改变这个对象的属性&#xff0c;并可返回变化后的结果&#xff0c;那么这里到底是值传递还是引用传递? 答&#xff1a;是值传递。Java编程语言只有值传递参数。 当一个对象实例作为一个参数…

keras训练完以后怎么预测_农村小孩只有户口,没有承包地,以后怎么养老?看完我安心了...

阅读本文前&#xff0c;请您先点击上面的蓝色字体“三农荟”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新情感文章了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。 农村小孩&#xff0c;只有户口&#xff0c;没有属于自己的承包地&#xff…

函数的作用域以及预编译

一、函数的作用域 函数作用域有点像单面镜&#xff08;外面看不到里面&#xff0c;里面可以看到外面&#xff09;JS的特点&#xff1a;单线程、是 解释性语言 (翻译一行&#xff0c;执行一行) 二、预解析 JS预解析三部曲&#xff1a;语法解析 ⇒ 预编译 ⇒ 解释执行 JS 在执…

完整版PayPal支付(java后端教程)

首先引入 PayPal的sdk 这里我引入的是1.0.4版本的 <!-- 贝宝支付 SDK --><dependency><groupId>com.paypal.sdk</groupId><artifactId>checkout-sdk</artifactId><paypal-sdk.version>1.0.4</paypal-sdk.version></depe…

mac玩rust用什么画质_Mac上的活动监视器到底有什么用?你会用么?

您希望当Mac卡住或沙滩球不断旋转时&#xff0c;Mac中有一个任务管理器。它允许您强制退出已冻结的网站或应用程序。Windows用户熟悉任务管理器&#xff0c;并且擅长使用它来管理PC任务以优化PC性能。因此&#xff0c;您想知道Mac上是否有任务管理器&#xff1f;是的&#xff0…