반응형
string은 cin의 입력사이즈에 맞게 메모리 할당 -> 버퍼오버플로우 발생 x
#include <algorithm>
#include <vector>
#include <iostream>
void f(const std::vector<int> &src) {
std::vector<int> dest(5);
std::copy(src.begin(), src.end(), dest.begin());
}
int main(void){
int size = 0;;
std::vector<int> v;
std::cin >> size;
v.resize(size);
v.assign(size, 0x41414141);
f(v);
}
5 size보다 큰 src size가 입력되면 버퍼 오버플로우 발생.
#include <algorithm>
#include <vector>
#include <iostream>
void f(const std::vector<int> &src) {
std::vector<int> dest(src);
std::copy(src.begin(), src.end(), dest.begin());
}
int main(void){
int size = 0;;
std::vector<int> v;
std::cin >> size;
v.resize(size);
v.assign(size, 0x41414141);
f(v);
}
dest에 src로 명시
#include <algorithm>
#include <vector>
int main() {
std::vector<int> v;
std::fill_n(v.begin(), 10, 0x42);
}
- 첫번째 인자, 값을 바꿀 배열 요소들의 시작 주소.
- 두번째 인자, 바꿀 요소의 개수
- 세번째 인자, 대입할 값
- 벡터의 사이즈를 지정하지 않았기 때문에 버퍼 오버플로우 발생
#include <iostream>
#include <vector>
void f(const std::vector<int> &c) {
for(auto i = c.begin(), e = i + 20; i != e; ++i) {
std::cout << *i << std::endl;
}
}
int main(void) {
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
f(v);
}
이터레이터가 범위 넘어가면 쓰레기 값 출력
for(auto i = c.begin(), e = i + c.size(); i != e; ++i)
벡터 사이즈로 범위 한정.
반응형
'Security' 카테고리의 다른 글
[systemhacking] logical bugs (0) | 2021.11.23 |
---|---|
[systemhacking] Uninitialized value (0) | 2021.11.22 |
[systemhacking] Integer Issues (0) | 2021.11.22 |
[systemhacking] Memory corruption (0) | 2021.11.18 |
[systemhacking] format string bug (0) | 2021.11.17 |